ーーーーーーーicecream free server ーーーーーーーーーーーーーーーーーーーーーーー
MQTTについてのまとめ — そこはかとなく書くよん。 ドキュメント (tdoc.info)
https://take6shin-tech-diary.com/mqtt/ localでmqttブローカをたちあげる
一つの窓でブローカ開始してPub、もう一つの窓でSub
Subは自動ダウンなし 購読しっぱなし Pubは、一回の出版ごとに自動ダウン
MQTTbrokerを使ってみる(その1)準備編|ゆう|note 無料のbroker記事
MQTTbrokerを使ってみる(その2)通信編|ゆう|note 同上
username(*)はfseigojpなどといれる client_idはランダムに出されている
-------------node.js mqtt -------------------------test.mosquitto.org--------------------------------------
https://blog.mitsuruog.info/2015/02/what-mqtt.html を参考に
mqttxでanonymous接続してからsubscriptionでpresenceをつくると
node hello_mqtt.js のやりとりが観察できた
----------------bash mqtt ----public-mqtt5-broker----------------------------------------------------
https://qiita.com/ekzemplaro/items/0a03a96c2f5a5ba2ae55
------------------esp8266 for public mqtt server -------
-ーーーーーーesp32でフリーのMQTTを利用するーーtest.mosquitto.orgーーー
https://programresource.net/2020/05/23/3332.html : パブサブOK)
mqttxでanonymous loginしてESP32/TEST/TOPICをサブスクライブしておき
同時にESP32/TEST/TOPICをパブリッシュするようにしておく
あとは以下のコードを実行すると、コードからパブリッシュされるtest publishが
自動的にコードのサブスクライブを呼ぶ またmqttxでパブリッシュしたときは
それが自動的にコードのサブスクライブを呼ぶ
#include <PubSubClient.h>
#include <WiFi.h>
char ssid[] = "";
char pass[] = "";
const char* mqtt_server = "test.mosquitto.org";
const char* mqtt_topic = "ESP32/TEST/TOPIC";
WiFiClient mqttClient;
PubSubClient client(mqttClient);
char mqtt_clientid[32]; // uniqueである必要がある
void callback(char* topic, byte* payload, unsigned int length) {
char payload_ch[32];
int chlen = min(31, (int)length);
memcpy(payload_ch, payload, chlen);
payload_ch[chlen] = 0; // payload_chがc言語で扱える文字列となる
Serial.println(payload_ch);
} //ここはsubscribeで起動されるコード片
void wait_mqtt() {
if (!client.connected()) {
Serial.print("Waiting MQTT connection...");
while (!client.connected()) { // 非接続のあいだ繰り返す
if (client.connect(mqtt_clientid)) { // ここでuniqueなmqtt_clientidで接続する
client.subscribe(mqtt_topic); // ここで購読がセットされる
} else {
delay(2000);
}
}
Serial.println("connected");
}
}
void setup() {
Serial.begin(115200);
Serial.print("connecting wifi");
WiFi.mode(WIFI_STA); // station mode
if (String(WiFi.SSID()) != String(ssid)) {
WiFi.begin(ssid, pass);
}
WiFi.setSleep(false); // sleep omitted? 多分
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("connected");
byte mac_addr[6];
WiFi.macAddress(mac_addr);
sprintf(mqtt_clientid, "ESP32CLI_%02x%02x%02x%02x%02x%02x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
// ここでマックアドレスを用いてuniqueなclient_idを作成
client.setServer(mqtt_server, 1883); // websocketでない場合のポート番号は1883
client.setCallback(callback);
}
void loop() {
int c ;
wait_mqtt();
client.loop();
client.publish(mqtt_topic, "test publish"); //送信はこうで、自動的に購読のcallbackが呼ばれる
Serial.println("sub");
delay(1000);
}
ーーーーーabout esp8266 -- local mosquitto broker --一番現実的かも
https://tiagohorta1995.medium.com/mosquitto-mqtt-broker-and-esp8266-communcation-in-6-easy-steps-5ea0efae5a10 でローカルのmqtt brokerを
うごかしての記録 mossquitto.confを自作して再起動して成功 conf :: 以下の2行だけ
listener 1883
allow_anonymous true
アルディーノのコードはこれ やはりpublishとsubscribeは同居できんかった
別窓からパブしてOKだった
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// WiFi
const char *ssid = "184F32CF8BF3-2G"; // Enter your WiFi name
const char *password = "2215085363556"; // Enter WiFi password
// MQTT Broker
const char *mqtt_broker = "192.168.3.9"; // get by hostname -I
const char *topic = "test/topic";
const int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
// Set software serial baud to 115200;
Serial.begin(115200);
// connecting to a WiFi network
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
//connecting to a mqtt broker
client.setServer(mqtt_broker, mqtt_port);
client.setCallback(callback);
while (!client.connected()) {
String client_id = "esp8266-client-";
client_id += String(WiFi.macAddress());
Serial.printf("The client %s connects to mosquitto mqtt broker\n", client_id.c_str());
if (client.connect(client_id.c_str())) {
Serial.println("Public emqx mqtt broker connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
// publish and subscribe
client.publish(topic, "Hello From ESP8266!");
client.subscribe(topic);
}
void callback(char *topic, byte *payload, unsigned int length) {
Serial.print("Message arrived in topic: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char) payload[i]);
}
Serial.println();
Serial.println(" - - - - - - - - - - - -");
}
void loop() {
client.loop();
}
0 件のコメント:
コメントを投稿