IOT 雲端控制LED Arduino+Google Firebase 篇

一開始有說 安信可 有一個機智雲
可以從手機控制 ESP8266 但是手邊沒有大陸手機號碼 沒法用
找一下資料
之前玩樹梅派就看過有人將偵測到的溫度 往雲端傳
當時是 範例是看到 ubidots 註冊了一個 但都沒開始用
這次再查時 哇! 一堆 ThingSpeakWoT.CityAWSIBM BluemixMediaTek MCSGoogle Firebase
Google 也有哩
不囉嗦就用它了
 也不用申請了 本來就有 Google 帳號
接下來就是找資料了 Esp8266 Arduino Firebase
很不幸
中文網頁沒有(有教學課程 要報名的)
運氣也很好  英文有 還有影片教學

Light control via Internet Arduino Esp8266 Firebase


好啦 實際照教學走一趟
我是用  D1 Mini  Arduino 1.8.1
1 進 Firebase 建一個專案(大部分說明有中文)
我建一個 Myled  建好後點選右邊 Database 就看到 myled-fed8a  應該取這名字太多人了
上方有個連結 https://myled-fed8a.firebaseio.com/ 這是專案入口
點上方規則:改
{
  "rules": {
    ".read": true,
    ".write": true
  }

}
"發布"  這是取消驗證 省得麻煩

2.開始寫程式
  重點:
a.除了wifi 需用到  firebase-arduino
   下載Zip後 我是用  IDE 的"草稿碼">"匯入程式庫">"加入Zip程式庫" 
選剛剛下載的 firebase-arduino-master.zip 就會自己加 不需copy

b.偷懶一點 Tabvn 有寫好的可以下載  https://github.com/tabvn/arduino-lighting-control
    直接開 lightControl.ino 編譯一下沒錯誤 很好
    這時要修改幾個地方
這邊改申請的網站
#define firebaseURl "myled-fed8a.firebaseio.com" //申請的連結
#define authCode "YOUR-AUTHENTICATION-KEY"
// firebase網站 左上 齒輪>專案設定>服務帳戶> 舊版憑證 資料庫密鑰  複製過來

這邊改你家的基地台
#define wifiName "Home"
#define wifiPass "hoaminh8vn"

c.照影片教的加入一個 123 的資料
可以這樣看資料 
https://myled-fed8a.firebaseio.com/123.json
但要先將驗證歸則  read 設 true 先取消 才讀的到
確認後 驗證再改回來

d.改完這時上傳到 D1 Mini 開監看視窗
  就可以看到他一直讀資料了

這時直接去 firebase 改資料 的確讀到的資料會變
但是燈卻亂亮 ............................
終於查出他程式有錯誤
在 setupPinsMode()  那邊錯了 所以燈亂了
修正後的程式 
----------------------------------------------------------------
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
int leds[3] = {D1,D2,D3};//D1 D2 D3 {5,4,0}
int states[3] = {LOW, LOW, LOW};

#define firebaseURl "myled-fed8a.firebaseio.com"
//左上 齒輪>專案設定>服務帳戶> 舊版憑證 資料庫密鑰
#define authCode "資料庫密鑰"

#define wifiName "基地台"
#define wifiPass "密碼"

String chipId = "123";//資料庫

void setup() {
  Serial.begin(9600);
  setupWifi();
  setupFirebase();
  setupPinsMode();
}

void loop() {
  getData();
  delay(100);
}

void getData() {
  String path = chipId + "/states";
  FirebaseObject object = Firebase.get(path);
  bool led1 = object.getBool("001");
  bool led2 = object.getBool("002");
  bool led3 = object.getBool("003");

  Serial.print("Led 123: ");
  Serial.print(led1);
  Serial.print(led2);
  Serial.print(led3);
  Serial.println();
// write output high or low to turn on or off led
  digitalWrite(D1, led1);
  digitalWrite(D2, led2);
  digitalWrite(D3, led3);
}

void setupFirebase() {
  Firebase.begin(firebaseURl, authCode);
}

void setupWifi() {
  WiFi.begin(wifiName, wifiPass);
  Serial.println("Hey i 'm connecting...");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.println(".");
    delay(500);
  }

  Serial.println();
  Serial.println("I 'm connected and my IP address: ");
  Serial.println(WiFi.localIP());
}

void setupPinsMode() {
  // setup Pin mode as output.
  for (int i=0; i < 3; i++) {
    Serial.printf("Setup Output for pin %d", leds[i]);
    pinMode(leds[i], OUTPUT);
  }

}
---------------------------------------------------------------------------------------
改完後正常
接下來就是怎麼送資料控制了 下回分解


留言

  1. 您好我上傳之後,序列視窗會一直顯示
    Hey i 'm connecting...
    .
    .

    沒有動作,想詢問這如何解決呢?
    我使用手機分享ap,手機上有顯示到ESP已經連上,但序列顯示一樣的問題

    回覆刪除
  2. 手機分享ap 我是沒試過 我是連家裡 wifi AP
    你應該是卡在這邊
    Serial.println("Hey i 'm connecting...");
    while (WiFi.status() != WL_CONNECTED) {
    Serial.println(".");
    delay(500);
    }

    如你確定有連上沒問題 把檢查的動作 拿掉 剩
    WiFi.begin(wifiName, wifiPass);
    delay(500);
    Serial.println("I 'm connected and my IP address: ");
    Serial.println(WiFi.localIP());
    這邊會show出 ESP連上後取得的 IP 如果有取得對外ip 那就可能是 ESP8266 對手機分享AP 檢查有問題
    如果還是不行 查一下 帳密 或是 拿一台AP 試看看 確定 esp8266 沒問題

    回覆刪除
  3. 請問一下我是用Node MCU2的模組板 但前幾天都還可以連結上firebase,可是今天卻沒辦法上傳資料wifi連上後 過一下子就斷線了,確認過firebase的網址跟密鑰都沒問題
    我遇到的是什麼問題呢?
    謝謝

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. IOT: Firebase 最近問題已解決 作者 已更新 firebase-arduino

      刪除
  4. 我也遇到跟樓上一樣的問題!!今天也連不上firebase....我是用Node MCU ESP8266

    回覆刪除
  5. IOT: Firebase 最近問題已解決 作者 已更新 firebase-arduino

    回覆刪除
  6. 你好,我載完firebase Arduino編譯後,裡面沒有ESP8266WiFi.h檔,我去其他地方找這個黨套用進去後也是沒有辦法,請問該怎麼解決呢 謝謝

    回覆刪除
    回覆
    1. 這版本是針對 ESP8266 寫的
      可能是你一開始就沒安裝 ESP8266
      在 "偏好設定">"開發版管理員網址" 填入
      http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json
      然後 "開發版管理員"內 找 Eep8266 安裝
      安裝完就會有ESP8266WiFi.h
      然後板子要選對 "WeMos D1 R2 &Mini"
      或是ESP8266相關板子
      才可以用ESP8266WiFi.h

      刪除
  7. 我也不行.. error()也沒回傳錯誤訊息...

    回覆刪除
  8. 想問下~我視窗出現 以下錯誤,是在FirebaseArduino.h裡面,這有人遇過嗎?Arduino版本用1.8.5
    /Users/huifengchen/Documents/Arduino/libraries/firebase-arduino-master/src/FirebaseHttpClient_Esp8266.cpp: In member function 'virtual std::string FirebaseHttpClientEsp8266::errorToString(int)':
    /Users/huifengchen/Documents/Arduino/libraries/firebase-arduino-master/src/FirebaseHttpClient_Esp8266.cpp:83:11: error: 'errorToString' is not a member of 'HTTPClient'
    return HTTPClient::errorToString(error_code).c_str();

    回覆刪除
  9. 你好,我載完firebase Arduino編譯後,編譯不過去,出現如下訊息
    fatal error: memory: No such file or directory
    是因為IDE裡面沒有memory這個函式庫嗎?
    是的話,這個函式庫需要去哪邊載?

    回覆刪除
  10. 你好,請問我把led1 print出來,不知道為什麼一直是空值耶??

    回覆刪除

張貼留言

熱門文章