#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#define INTERVAL
1000 // MiliSecond
#define
SSID
"APのSSID"
#define PASSWORD
"APのパスワード"
#define MQTT_SERVER
"broker.hivemq.com"
#define MQTT_PORT 1883
#define MQTT_TOPIC
"nopnop2002" // You can
change
#define MQTT_WILL_TOPIC
"nopnop2002" // You can
change
#define MQTT_WILL_MSG "I am leaving..." // You
can change
#define PAYLOAD_SIZE 50
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMillis;
IPAddress localIP;
void connect_wifi() {
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Wait for WiFi...");
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
int retry = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
retry++;
if (retry > 30) ESP.reset();
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("Wifi status: ");
Serial.println(WiFi.status());
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void connect_server(char * will_topic, char * will_msg) {
char clientid[20];
sprintf(clientid,"ESP8266-%6x",ESP.getChipId());
Serial.print("clientid=");
Serial.println(clientid);
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT
connection...");
// Attempt to connect
//if (client.connect(clientid)) {
if (client.connect(clientid,
will_topic,0, 0, will_msg )) {
Serial.println("connected");
// Once connected, publish
an announcement...
client.publish("outTopic",
"mqtt_esp8266_sub_temp");
// ... and resubscribe
//client.subscribe("inTopic");
//client.subscribe("nopnop2002/#");
} else {
Serial.print("failed,
rc=");
Serial.print(client.state());
Serial.println(" try again
in 5 seconds");
// Wait 5 seconds before
retrying
delay(5000);
}
}
}
void errorDisplay(char* buff) {
Serial.print("Error:");
Serial.println(buff);
while(1) {
delay(200);
}
}
void setup() {
Serial.begin(115200);
connect_wifi();
client.setServer(MQTT_SERVER, MQTT_PORT);
connect_server(MQTT_WILL_TOPIC, MQTT_WILL_MSG);
Serial.println("connected");
lastMillis = millis();
}
void loop() {
static int value = 0;
char payload[PAYLOAD_SIZE];
client.loop();
if (!client.connected()) {
Serial.println("NOT Connected");
Serial.print("Wifi status: ");
Serial.println(WiFi.status());
if (WiFi.status() != WL_CONNECTED)
connect_wifi();
connect_server(MQTT_WILL_TOPIC,
MQTT_WILL_MSG);
}
if (Serial.available() > 0) {
char inChar = Serial.read();
Serial.println("KeyIn");
client.disconnect();
Serial.println("Publish end");
while(1) {
delay(200);
}
}
long now = millis();
if (now - lastMillis > INTERVAL) {
lastMillis = now;
++value;
snprintf (payload, PAYLOAD_SIZE, "hello
world #%ld", value);
Serial.print("loalIP:");
Serial.print(localIP);
Serial.print(" Publish message: ");
Serial.println(payload);
if (!client.publish(MQTT_TOPIC,
payload)) {
Serial.println("publish
fail");
//errorDisplay("publish
fail");
}
}
} |