#include <ESP8266WiFi.h>
#include <PubSubClient.h> //
https://github.com/knolleary/pubsubclient
#define MQTT_PORT 1883
#define MQTT_TOPIC
"/topic/rssi" // You can change
#define MQTT_WILL_MSG "I am leaving..." // You
can change
#define MQTT_SERVER
"192.168.10.40"
#define PAYLOAD_SIZE 50
#define
TOTAL
30
const char* SSID = "ルータのSSID";
const char* PASSWORD = "ルータのパスワード";
WiFiClient espClient;
PubSubClient client(espClient);
unsigned long lastMillis;
long rssi_table[TOTAL];
void setup(){
delay(1000); Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
Serial.print("Wait for WiFi...");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("subnetMask: ");
Serial.println(WiFi.subnetMask());
Serial.print("gatewayIP: ");
Serial.println(WiFi.gatewayIP());
Serial.print("ESP ChipId:");
Serial.print(ESP.getChipId());
Serial.println();
client.setServer(MQTT_SERVER, MQTT_PORT);
char clientid[20];
sprintf(clientid,"ESP8266-%06x",ESP.getChipId());
Serial.print("clientid=");
Serial.println(clientid);
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (strlen(MQTT_WILL_MSG)) {
if
(!client.connect(clientid,MQTT_TOPIC,0,0,MQTT_WILL_MSG)) {
delay(10*1000);
Serial.println("failed");
ESP.restart();
}
} else {
if (!client.connect(clientid)) {
delay(10*1000);
Serial.println("failed");
ESP.restart();
}
}
Serial.println("connected");
long rssi1 = WiFi.RSSI();
Serial.print("RSSI:");
Serial.println(rssi1);
lastMillis = millis();
}
void loop() {
static int index = 0;
char payload[PAYLOAD_SIZE];
if (!client.connected()) {
delay(10*1000);
ESP.restart();
}
client.loop();
long now = millis();
if (now - lastMillis > 10000) {
lastMillis = now;
if (index < TOTAL) {
long rssi1 = WiFi.RSSI();
Serial.print("RSSI[");
Serial.print(index);
Serial.print("]=");
Serial.println(rssi1);
snprintf (payload,
PAYLOAD_SIZE, "RSSI[%d]=%ld", index, rssi1);
Serial.print("Publish
message: ");
Serial.println(payload);
if
(!client.publish(MQTT_TOPIC, payload)) {
delay(10*1000);
ESP.restart();
}
rssi_table[index] = rssi1;
index++;
} else {
long total = 0;
for(int i=0;i<TOTAL;i++)
{
total = total +
rssi_table[i];
}
float average =
(float)total / (float)TOTAL;
Serial.print("average=");
Serial.println(average);
snprintf (payload,
PAYLOAD_SIZE, "RSSI average=%f", average);
Serial.print("Publish
message: ");
Serial.println(payload);
if
(!client.publish(MQTT_TOPIC, payload)) {
delay(10*1000);
ESP.restart();
}
}
}
}
|