Top
使用Nodemcu連接Firebase database
透過App Inventor 2製作遙控軟體
(107.12.16更新:範例檔載點、如何節省數據用量)


並將使用Google 的Firebase Database功能
讓手機能透過網路(非區網)控制nodemcu
從外地控制家中的電器再也不是問題

使用器材:Arduino IDE、Nodemcu、App Inventor 2
關於IDE的設定可以參考佑來了的這部影片

如果你還不會使用區往讓手機控制nodemcu
建議你先看看這部影片

當你會了基本的區網控制後
讓我們來看看如何使用網際網路控制nodemcu吧!

壹、Firebase
 一、首先,你先登入Google的Firebase

 二、接著點擊右上角的"前往控制台"

 三、點選"新增專案"並輸入專案名稱(自訂)
   同時也請選擇您所在的地區

 四、點選"建立專案

 五、點擊Database"開始使用"

 六、點選"以測試模式啟動"、"啟用"

 七、新增資料( 標籤:test;值:0 )

 八、複製資料庫的網址及資料庫密鑰

貳、Nodemcu
 一、設定開發版及安裝函式庫
   開發版的配置在這裡不做贅述
   請至GitHub下載最新函式庫:
   
 (107.12.16更新:為確保能順利運作,請確認所用之
 所有函示庫皆為最新版本(Arduino IDE>草稿碼>
 匯入程式庫>管理程式庫),且不要使用beta版函示庫)
 二、程式碼部分
   1.setup()部分
#include
#include
#define FIREBASE_HOST "xxxxxxxxxxxxxxxx.firebaseio.com"
//資料庫網址 勿包含”http://"和"/"
#define FIREBASE_AUTH "xxxxxxxxxxxxxxxxxxxxxxxxxx" // 資料庫密鑰
#define WIFI_SSID "xxxxxx"     //wifi ssid
#define WIFI_PASSWORD "xxxxxx" //wifi password
void setup() {
 Serial.begin(115200);  //啟用通訊
 pinMode(LED_BUILTIN,OUTPUT);  //設置腳位
 WiFi.begin(WIFI_SSID,WIFI_PASSWORD); //連線至wifi
 Serial.print("connecting");
 while (WiFi.status()!=WL_CONNECTED){ //尚未連接成功
   Serial.print(".");
   delay(500);
 }
 Serial.println();
 Serial.print("connected:");
 Serial.println(WiFi.localIP()); //輸出ip位址
 Firebase.begin(FIREBASE_HOST,FIREBASE_AUTH); //連線至資料庫
 Firebase.set("test","0"); //設置資料庫中標籤為test的值為0
}

   2.loop()部分
void loop() {
 if (Firebase.failed()) {//連線至資撩庫失敗
     Serial.print("setting number failed:");
     Serial.println(Firebase.error());
     firebasereconnect();//呼叫重新連接
     return;
 }
 int r=Firebase.getString("test").toInt();//讀取資料庫中標籤為test的值
 delay(100);
 Serial.print("get:");
 Serial.println(r);
 digitalWrite(LED_BUILTIN,r);//nodemcu板上LED 1為暗燈0為亮燈
}

   3.其他函式
void firebasereconnect(){//重新連接
 Serial.println("Trying to reconnect");
 Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}

   4.注意事項
     Nodemcu板上的LED燈 1為暗燈0為亮燈

   5.如何節省數據用量?(107.12.16更新)
//已下放setup(在Firebase.begin()之後)
Firebase.stream("");  //事件監聽器
//以下放loop
void Firebase_check(){   //(檢查Firebase是否又事件(數據改變))
 while(Firebase.available()>0){
   FirebaseObject event = Firebase.readEvent();
   String eventType = event.getString("type");
   eventType.toLowerCase();
   //在這裡作當Firebase發生事件(數據改變)時要做的事,例如抓取資料...
 }
}


叁、App inventor
 一、介面配置
   1.元件包括:1個標籤、2個按鈕及Firebase
   2.”Firebase憑證”不用做任何更動
   3."Firebase URL網址"請填寫您的資料庫網址
   4."使用預設值"不勾選;"保持"請勾選
   5."專案"請留白

 二、程式碼部分

 三、打包程式

肆、心得與示範影片
 範例檔(107.12.16更新)nodemcu_database.ino
 了解了基本架構後,就有能力做ㄧ些IoT專案了
 相信大家都能舉一反三,做出更進階的作品
 而對於連線速度,我相當滿意(可見示範影片)
 

 
 ~感謝大家閱讀本文章

 

7 則留言 :

  1. 請問nodemcu跟uno板結合後
    這個方法也行得通嗎

    回覆刪除
    回覆
    1. 原則上UNO版上能做的事nodeMCU都能做,但NodeMCU腳位較少
      您指的"nodemcu跟uno板結合"我不太清楚事甚麼意思,不過可以利用softwareSerial的方式讓NodeMCU跟UNO溝通,把NodeMCU當作一個連網的媒介
      希望這樣的回答能幫助到您

      刪除
    2. 利用softwareSerial的方式讓NodeMCU跟UNO溝通,把NodeMCU當作一個連網的媒介,请问这要如何呢?因为我也是用这样的方式,但失败。

      刪除
  2. FirebaseArduino.h: No such file or directory
    請問一下 是要去程式庫載什麼??

    回覆刪除
  3. 您好,小弟想用MQ2+NodeMCU上傳數據上Firebas,但將上述的Code打進arduino compiler時卻在void firebasereconnect(){}出現'Firebase' was not declared in this scope'的問題,想請問是我有函式庫沒安裝好嗎?

    回覆刪除
  4. 請問一下可以給函式庫的下載地址嗎?

    回覆刪除
    回覆
    1. https://github.com/FirebaseExtended/firebase-arduino

      刪除