mDNS 이름을 쫓아 MQTT로 무언가를 던지는 버튼

RaspberryPi 종료 또는 재설정에 이상적



Raspberry Pi가 재부팅하고 IP 주소가 바뀌면 제대로 IP 주소를 쫓을 수있게했다.

・추가한 노드 노드(비늘 기억)
node-red-contrib-rpi-shutdown
node-red-contrib-aedes

・좋은 느낌에 node-RED를 만들어 둔다

주제 이름은 topic

참고 자료



htps : // 이 m / 하나 펑 / ms / c2df143db에서 33에 03에 674
h tps:// 퀵했다. 작은 m/포루루장/있어 MS/5d9434아아 C4895f8아 6f7아

출처



m5atom-MQTTswith

m5atom-MQTTswith.ino
#include <M5Atom.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <ESPmDNS.h>

WiFiClient wifi;
const char* wifi_ssid = "Wi-Fi";
const char* wifi_password = "pass";

PubSubClient client(wifi);

//.local不要
const char* mqtt_server = "your Raspberry Pi mDNS name";

const uint16_t mqtt_port = 1883; 
#define MQTT_CLIENT_NAME  "M5Atom"

#define BTN_PUSH_MARGIN 100
#define MQTT_BUFFER_SIZE 512

bool pressed = false; 

void wifi_connect(void){
  Serial.print("WiFi Connenting");

  WiFi.begin(wifi_ssid, wifi_password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("");
  Serial.print("Connected : ");
  Serial.println(WiFi.localIP());

}

void sendMessage(void){
  // MQTT Publish
  client.publish("topic","1");
  delay(BTN_PUSH_MARGIN);
  client.publish("topic","0");
}

void setup() {
  M5.begin(true, false, true);

  Serial.begin(115200);
  wifi_connect();
  if(!MDNS.begin("m5atom")){
    Serial.println("Error MDNS");
    while(1){
      delay(1000);
    }
  }
  client.setBufferSize(MQTT_BUFFER_SIZE);
}


void loop() {
  client.loop();
  while(!client.connected() ){
    if (MDNS.queryHost(mqtt_server)==IPAddress('0.0.0.0')){
      delay(1000);
    }
    IPAddress mqtt_server_ip = MDNS.queryHost(mqtt_server);
    Serial.println(mqtt_server_ip);
    client.setServer(mqtt_server_ip, mqtt_port);
    Serial.println("Mqtt Reconnecting");
    if( client.connect(MQTT_CLIENT_NAME) ){
      Serial.println("Mqtt Connected");
      break;
    }
    delay(1000);
  }

  M5.update();

    if (M5.Btn.isPressed() && !pressed ){
      pressed = true;
      // 送信
      sendMessage();
      Serial.println("Mqtt Send");
      delay(BTN_PUSH_MARGIN);
    }else if( M5.Btn.isReleased() && pressed ){
      pressed = false;

      delay(BTN_PUSH_MARGIN);
    }
}

좋은 웹페이지 즐겨찾기