iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0
IoT

從開源kubernetes雲端運算到kubeedge雲邊協同系列 第 28

Day 28 KubeEdge小專題: NodeMCU設定

  • 分享至 

  • xImage
  •  

今天要說硬體設定的部分,在室內亮度偵測的部分我使用光敏電阻。

NodeMCU的部分我使用NodeMCU rev3.0,電阻是5k歐姆的電阻
電路圖:

底下是Arduino code程式碼:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "D-Link_DIR-612"; // WIFI名稱
const char* password = "*******"; // WIFI密碼
const char* mqttServer = "192.168.0.7";  // MQTT伺服器位址
const char* topic = "channels/light/"; // 發佈的主題

unsigned long prevMillis = 0;  // 暫存經過時間(毫秒)
const long interval = 2000;  // 上傳資料的間隔時間,2秒。
String msgStr = "";      // 暫存MQTT訊息字串

char json[25];

WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
}

void reconnect() {
  while (!client.connected()) {
    //if (client.connect(clientID, mqttUserName, mqttPwd)) {
    if (client.connect(clientID)){
      Serial.println("MQTT connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 4 seconds");
      delay(4000);  // 等4秒之後再重試
    }
  }
}

void setup() {
  Serial.begin(9600);
  setup_wifi();
  client.setServer(mqttServer, 1883);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  // 每兩秒發布一次topic
  if (millis() - prevMillis > interval) {
    prevMillis = millis();

    // 讀取感測器資料
    int sensorValue = analogRead(A0);

    // 組合MQTT訊息
    msgStr = msgStr  + "{\"light\":" + (sensorValue) + "}";

    // 宣告成字元陣列
    msgStr.toCharArray(json, 25);


    Serial.print("Publish message: ");
    Serial.println(msgStr);

    client.publish(topic, json);
    //client.publish(topic, msg);       // 發布MQTT主題與訊息
    msgStr = "";
  }
}

樹梅派安裝MQTT beoker, client

sudo apt-get install mosquitto mosquitto-clients

在樹梅派上訂閱主題

mosquitto_sub -t channels/light/

確定有發佈出去後就可以透過Day 24中的python程式訂閱主題取得感測器資料、寫入資料庫並經過Grafana作呈現。明天會說明使用Job排程的方式搭配之前的備份小程式實現定期備份功能。


上一篇
Day 27 KubeEdge小專題: Grafana部署
下一篇
Day 29 KubeEdge小專題: 使用Job實現定期備份功能
系列文
從開源kubernetes雲端運算到kubeedge雲邊協同30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言