IKEA_Clock

IKEA時鐘

這個範例,應該是從日本那兒學來的(原作者寫了這麼長的程式碼,)實在厲害),使用M5Stack-FIRE來實作,程式是使用Arduino code,這個時鐘很有趣,翻轉四個方向會出現不同的功能,分別是時鐘、鬧鐘,碼錶和溫度計

參考網址:qiita.com/yankee/items/1591724d8a2722951c7e#%E3%82%A2%E3%83%A9%E3%83%BC%E3%83%A0%E6%A9%9F%E8%83%BD 

~就是在模擬這一顆時鐘…

產品說明是這樣的:

每一邊都有不同功能,只要翻轉就能變換功能:時間/日期、鬧鐘、溫度和計時器;不佔用空間,又容易使用,即使是半睡半醒狀態也能使用

※圖片取自IKEA購物網

※如果看一下價錢,現在特價99元,哈哈…拿一千多大洋的M5Stack FIRE IoT Development Kit來仿做一個99元的商品?唉呀!我們說的是程式的樂趣!而且IKEA這顆時鐘不能上網的,我們的仿冒品是連網校正時間的…

實作

一定得改的地方提示

// Wi-Fi

const char *ssid = "你的AP名稱";

const char *password = "你的網路連線密碼";

※如果網路連不上,有時會出現左圖的樣子,有時會閃一下黑幕,別緊張!不是壞了,M5的主機若有設定連線,不成功就會卡在那兒,後面的程式碼都不跑了

// NTP(同步時間的伺服器)

const char *ntp_server_1st = "ntp2.ntu.edu.tw";  //原本是日本的,建議改成台灣的

const char *ntp_server_2nd = "time.google.com";//第二個保持GOOGLE的

const long gmt_offset_sec = 8 * 3600; // 時差(秒換算)

const int daylight_offset_sec = 0;    // 夏時間

關於MPU9250停產的消息

※由於mpu9250已經停產,新出的M5Stack core裡頭都是BMM150 + MPU6886來取代原本的MPU9250 ,如果您的M5Stack-fire是很早買的那麼裡頭還是9250

我的改寫

原作者的程式跑起來後,在碼錶和鬧鐘的響鈴部份不會叫…所以增加了這部份

//聲音頻率定義
#define NOTE_D0 -1
#define NOTE_D1 294
#define NOTE_D2 330
#define NOTE_D3 350
............
    //加上聲音提示(改用tone)
  //M5.Speaker.beep(); //這是原來的寫法
  //frequency -1, with a duration of 200ms
    M5.Speaker.tone(NOTE_DH2, 100);
    delay(100);
    M5.Speaker.tone(NOTE_D0, 100);
    delay(100);
    M5.Speaker.tone(NOTE_DH2, 100); 

改用動態的wifi連線方式

原本的程式碼將連接的AP名稱及密碼寫死在程式的設定裡,有一個困擾,如果把機器拿到別處,它便上不了網,得修改原始碼的設定再重新燒錄,這是很不ok的…

我試著重寫這個部份,加入了SoftAP的功能,也就是它到了不能連網的地方不會掛掉,而是會啟動AP功能,還有啟動WebServer(就在192.168.4.1),使用筆電連入那個AP,到它的網頁就可以設定要連接的AP及設定密碼,然後連上網路

※都不用再重燒程式碼了

SoftAP模式

掃瞄現場AP的SSID

在AP樣式中設定好新的WIFI連線資訊後,M5Stack就會重新啟動並連上新設定的SSID,然後進入主程式

※在程式中,M5Stack Fire將網頁輸入的ssid及密碼寫入內存,開機時會先檢查是否有內存的資料,如果有就拿出來上網

// wifi config

 storePreferences preferences;

void setup()
{  

preferences.begin("wifi-config");

}

移地訓練完成測試

這樣才是完成測試…,今早M5Stack-Fire拿到學校來,一開機如預期的它會先用內存昨天的ssid紀錄去連線,失敗了便啟動SoftAP模式 

自己變成基地台

啟用SoftAP功能

啟動WebServer

連到自帶的網頁伺服器,這個網頁上列出環境中的AP

重新上網

取得新的連線資料後,又寫入內存,重新開機上網