Day 28 KubeEdge小专题: NodeMCU设定

今天要说硬体设定的部分,在室内亮度侦测的部分我使用光敏电阻。

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排程的方式搭配之前的备份小程序实现定期备份功能。


<<:  DAY27-SQL语法(VIEW 实作)

>>:  <Day29>动手做 Demo App(上)

最短路径问题 (1)

9.4 关於三连通的练习题 这题超难,我把连结放这边就好。 https://acm.timus.ru...

Day-21 队列(Queue)与循环对列(Circular Queue)

队列(queue)介绍 队列就如同堆叠一般,是一种线性表,与堆叠不同的地方在於,堆叠的push和po...

事件检视器的使用介绍(一)--Windows内建的日志查看程序

今天正式进入Windows的事件检视器了,先来看懂这项工具吧,首先我们按Win+X显示功能表,再按V...

AutoML NAS - SGAS: Sequential Greedy Architecture Search(上篇)

1 前言 近年来深度学习使用在许多比赛中,但几乎都使用ensemble(集成)的方式或是使用庞大的模...

从零开始的8-bit迷宫探险【Level 9】与 SpriteKit 的初次见面 (二)

今日目标 在 SKScene 中加入节点 (Node) 认识座标系统 SKNode SKNode 是...