NodejsはMQTTを利用してEsp 8266にデータを転送します.
7669 ワード
前の2つの記事はNodejsがMQTTサーバデータを受信し、Esp 8266センサデータをMQTTサーバに送信することを実現しました.今はNodejsを通じてEsp 8266上にデータを転送したいので、Esp 8266センサデータの収集時間間隔を制御できます.
主にPbSubClientライブラリのsubscribeとpublishの使用です.npmでmqttの使用もあります.
参考記事:https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_esp 8266/mqtt_esp 8266.inohttps://www.npmjs.com/package/mqtt
Nodejs端末で使用するコード:
主にPbSubClientライブラリのsubscribeとpublishの使用です.npmでmqttの使用もあります.
参考記事:https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_esp 8266/mqtt_esp 8266.inohttps://www.npmjs.com/package/mqtt
Nodejs端末で使用するコード:
/* MQTT ( publish )*/
var mqtt = require('mqtt')
var fs = require('fs')
var client = mqtt.connect('mqtt://127.0.0.1:61613',{username:"admin",password:"password"})
client.on('connect',function () {
client.subscribe('world');
client.publish('world','5000');
})
client.on('message', function (topic, message) {
console.log(typeof message);
console.log(message.toString());
client.end();
})
Esp 8266エンドコード:// callback()
#include
#include
#include
#include
#ifdef U8X8_HAVE_HW_SPI
#include
#endif
#ifdef U8X8_HAVE_HW_I2C
#include
#endif
const char *ssid = "smart";
const char *password = "19940508";
WiFiClient espClient;
PubSubClient client(espClient);
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/D3, /* data=*/D2, /* reset=*/U8X8_PIN_NONE);
int lastVal = 0;
int ordernum = 1000;
// String offcommand ;
void reconnect()
{
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
// client connect("id","username","password")
if (client.connect("arduinoClient","admin","password"))
{
Serial.println("connected");
// Topic:world
client.subscribe("world");
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// 5s
delay(5000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
char arr[length];
for (int i = 0; i < (int)length; i++) {
arr[i] = (unsigned char)payload[i];
// Serial.print(arr[i]);
}
// '\0' ,
arr[length] = '\0';
// Serial.println(arr);
//char int
ordernum = atoi(arr);
Serial.println(ordernum);
}
void setup()
{
Serial.begin(9600);
u8g2.begin();
delay(10);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// mqtt
client.setServer("192.168.43.65", 61613);
client.setCallback(callback);
pinMode(A0,INPUT);
}
void loop()
{
if (!client.connected())
{
reconnect();
}
client.loop();
int val = analogRead(A0);
char str [10];
itoa(val, str, 10);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(0, 30, str);
if (val != lastVal) {
// ordernum
// Topic: hello
delay(ordernum);
client.publish("hello", str);
lastVal = val;
}
u8g2.sendBuffer();
delay(10);
}
大体のコードはこのようになります.