-
-
Save chaeplin/8ff93aedb75266d644d2 to your computer and use it in GitHub Desktop.
#include <ESP8266WiFi.h> | |
#include <PubSubClient.h> | |
#include "/usr/local/src/ap_setting.h" | |
extern "C" { | |
#include "user_interface.h" | |
} | |
char* topic = "wifitest"; | |
int test_para = 5000; | |
long lastMsg = 0; | |
String clientName; | |
const char* ssid = WIFI_SSID; | |
const char* password = WIFI_PASSWORD; | |
IPAddress mqtt_server = MQTT_SERVER; | |
const long sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz) | |
unsigned int sample; | |
WiFiClient wifiClient; | |
PubSubClient client(mqtt_server, 1883, wifiClient); | |
String macToStr(const uint8_t* mac) | |
{ | |
String result; | |
for (int i = 0; i < 6; ++i) { | |
result += String(mac[i], 16); | |
if (i < 5) | |
result += ':'; | |
} | |
return result; | |
} | |
boolean reconnect() | |
{ | |
if (!client.connected()) { | |
if (client.connect((char*) clientName.c_str())) { | |
Serial.println("===> mqtt connected"); | |
} else { | |
Serial.print("---> mqtt failed, rc="); | |
Serial.println(client.state()); | |
} | |
} | |
return client.connected(); | |
} | |
void sendmqttMsg(char* topictosend, String payload) | |
{ | |
if (client.connected()) { | |
Serial.print("Sending payload: "); | |
Serial.print(payload); | |
unsigned int msg_length = payload.length(); | |
Serial.print(" length: "); | |
Serial.println(msg_length); | |
byte* p = (byte*)malloc(msg_length); | |
memcpy(p, (char*) payload.c_str(), msg_length); | |
if ( client.publish(topictosend, p, msg_length)) { | |
Serial.println("Publish ok"); | |
free(p); | |
//return 1; | |
} else { | |
Serial.println("Publish failed"); | |
free(p); | |
//return 0; | |
} | |
} | |
} | |
void wifi_connect() | |
{ | |
if (WiFi.status() != WL_CONNECTED) { | |
// WIFI | |
Serial.println(); | |
Serial.print("===> WIFI ---> Connecting to "); | |
Serial.println(ssid); | |
delay(10); | |
//WiFi.setPhyMode(WIFI_PHY_MODE_11B); | |
//WiFi.setPhyMode(WIFI_PHY_MODE_11G); | |
WiFi.setPhyMode(WIFI_PHY_MODE_11N); | |
WiFi.mode(WIFI_STA); | |
WiFi.begin(ssid, password); | |
int Attempt = 0; | |
while (WiFi.status() != WL_CONNECTED) { | |
Serial.print(". "); | |
Serial.print(Attempt); | |
delay(100); | |
Attempt++; | |
if (Attempt == 250) | |
{ | |
Serial.println(); | |
Serial.println("-----> Could not connect to WIFI"); | |
ESP.restart(); | |
delay(200); | |
} | |
} | |
Serial.println(); | |
Serial.print("===> WiFi connected"); | |
Serial.print(" ------> IP address: "); | |
Serial.println(WiFi.localIP()); | |
} | |
} | |
void setup() | |
{ | |
Serial.begin(74880); | |
wifi_connect(); | |
clientName += "esp8266-"; | |
uint8_t mac[6]; | |
WiFi.macAddress(mac); | |
clientName += macToStr(mac); | |
clientName += "-"; | |
clientName += String(micros() & 0xff, 16); | |
reconnect(); | |
} | |
unsigned long millisConnected; // Last time connected | |
unsigned long startMillis; // Start of sample window | |
unsigned int peakToPeak; // peak-to-peak level | |
unsigned int signalMax; | |
unsigned int signalMin; | |
void loop() | |
{ | |
if (WiFi.status() != WL_CONNECTED) | |
{ | |
Serial.print((millis() - millisConnected) / 1000); | |
Serial.print(" - mode : "); | |
const char* phymodes[] = { "", "B", "G", "N" }; | |
Serial.print(phymodes[(int) wifi_get_phy_mode()]); | |
Serial.print(" - rssi : "); | |
Serial.print(WiFi.RSSI()); | |
Serial.print(" - peakToPeak : "); | |
Serial.println(peakToPeak); | |
Serial.print("not connected"); | |
while (WiFi.status() != WL_CONNECTED) | |
{ | |
Serial.print("."); | |
delay(500); | |
} | |
millisConnected = millis(); | |
Serial.println(); | |
} | |
startMillis = millis(); | |
peakToPeak = 0; | |
signalMax = 0; | |
signalMin = 1024; | |
// collect data for 50 mS | |
while (millis() - startMillis < sampleWindow) | |
{ | |
sample = analogRead(A0); | |
// coment out delay(3) below | |
// and check on serial monitor | |
// if Wi-Fi connection | |
// is not being lost and then recovered | |
// every half a dozen or so seconds | |
//delay(3); | |
if (sample < 1024) // toss out spurious readings | |
{ | |
if (sample > signalMax) | |
{ | |
signalMax = sample; // save just the max levels | |
} | |
else if (sample < signalMin) | |
{ | |
signalMin = sample; // save just the min levels | |
} | |
} | |
} | |
peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude | |
double volts = (peakToPeak * 3.3) / 1024; // convert to volts | |
long now = millis(); | |
if (now - lastMsg > test_para) { | |
lastMsg = now; | |
uint32_t really_random = *(volatile uint32_t *)0x3FF20E44; | |
String payload = "{\"startMills\":"; | |
payload += millis(); | |
payload += ",\"rand\":"; | |
payload += really_random; | |
payload += ",\"FreeHeap\":"; | |
payload += ESP.getFreeHeap(); | |
payload += ",\"RSSI\":"; | |
payload += WiFi.RSSI(); | |
payload += "}"; | |
sendmqttMsg(topic, payload); | |
} | |
client.loop(); | |
} | |
/11G
===> mqtt connected
Sending payload: {"startMills":5262,"rand":206313857,"FreeHeap":46240,"RSSI":-54} length: 64
Publish ok
Sending payload: {"startMills":10303,"rand":3705006238,"FreeHeap":46224,"RSSI":-54} length: 66
Publish ok
Sending payload: {"startMills":15307,"rand":2486584037,"FreeHeap":46224,"RSSI":-54} length: 66
Publish ok
Sending payload: {"startMills":20312,"rand":3337503992,"FreeHeap":46224,"RSSI":-54} length: 66
Publish ok
Sending payload: {"startMills":25318,"rand":108598904,"FreeHeap":46224,"RSSI":-54} length: 65
Publish ok
Sending payload: {"startMills":30321,"rand":2083267847,"FreeHeap":46224,"RSSI":-54} length: 66
Publish ok
Sending payload: {"startMills":35325,"rand":2353236529,"FreeHeap":46224,"RSSI":-54} length: 66
Publish ok
Sending payload: {"startMills":40328,"rand":3401426410,"FreeHeap":46224,"RSSI":-54} length: 66
Publish ok
Sending payload: {"startMills":45331,"rand":3957623798,"FreeHeap":46224,"RSSI":-54} length: 66
Publish ok
Sending payload: {"startMills":50336,"rand":3271589294,"FreeHeap":46224,"RSSI":-56} length: 66
Publish ok
==> mqtt connected
Sending payload: {"startMills":5285,"rand":499910756,"FreeHeap":46240,"RSSI":-50} length: 64
Publish ok
Sending payload: {"startMills":10328,"rand":257884481,"FreeHeap":46224,"RSSI":-50} length: 65
Publish ok
Sending payload: {"startMills":15333,"rand":669367775,"FreeHeap":46224,"RSSI":-48} length: 65
Publish ok
Sending payload: {"startMills":20336,"rand":3951797724,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":25341,"rand":1967791062,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":30345,"rand":1275759507,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":35350,"rand":2551509139,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":40353,"rand":1089683738,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":45357,"rand":4221531697,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":50360,"rand":3211052839,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":55366,"rand":2645443068,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":60371,"rand":3181145900,"FreeHeap":45992,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":65377,"rand":1294356465,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
Sending payload: {"startMills":70420,"rand":3700418346,"FreeHeap":46224,"RSSI":-48} length: 66
Publish ok
�
//11N
===> mqtt connected
Sending payload: {"startMills":46456,"rand":688942422,"FreeHeap":46224,"RSSI":-57} length: 65
Publish ok
Sending payload: {"startMills":51500,"rand":309420641,"FreeHeap":46224,"RSSI":-57} length: 65
Publish ok
Sending payload: {"startMills":56504,"rand":734172512,"FreeHeap":46224,"RSSI":-57} length: 65
Publish ok
Sending payload: {"startMills":61517,"rand":2549015087,"FreeHeap":46224,"RSSI":-57} length: 66
Publish ok
Sending payload: {"startMills":66521,"rand":3859670852,"FreeHeap":46224,"RSSI":-57} length: 66
Publish ok
Sending payload: {"startMills":71524,"rand":1695451455,"FreeHeap":46224,"RSSI":-57} length: 66
Publish ok
Sending payload: {"startMills":76528,"rand":56333403,"FreeHeap":46240,"RSSI":-57} length: 64
Publish ok
Sending payload: {"startMills":81533,"rand":2535604176,"FreeHeap":46224,"RSSI":-56} length: 66
Publish ok
Sending payload: {"startMills":86541,"rand":1625656294,"FreeHeap":46224,"RSSI":-56} length: 66
Publish ok
===> mqtt connected
Sending payload: {"startMills":5191,"rand":3657051007,"FreeHeap":46224,"RSSI":-46} length: 65
Publish ok
Sending payload: {"startMills":10233,"rand":4265033220,"FreeHeap":46224,"RSSI":-46} length: 66
Publish ok
Sending payload: {"startMills":15238,"rand":2792381073,"FreeHeap":46224,"RSSI":-46} length: 66
Publish ok
Sending payload: {"startMills":20242,"rand":3131046028,"FreeHeap":46224,"RSSI":-46} length: 66
Publish ok
Sending payload: {"startMills":25247,"rand":2273938601,"FreeHeap":46224,"RSSI":-46} length: 66
Publish ok
Sending payload: {"startMills":30250,"rand":1665696838,"FreeHeap":46224,"RSSI":-46} length: 66
Publish ok
Sending payload: {"startMills":35255,"rand":2955714704,"FreeHeap":46224,"RSSI":-46} length: 66
Publish ok
Sending payload: {"startMills":40259,"rand":4118519235,"FreeHeap":45992,"RSSI":-46} length: 66
Publish ok
Sending payload: {"startMills":45264,"rand":2800663079,"FreeHeap":46224,"RSSI":-46} length: 66
Publish ok
Sending payload: {"startMills":50267,"rand":1975078923,"FreeHeap":45992,"RSSI":-46} length: 66
Publish ok
51 - mode : N - rssi : 31 - peakToPeak : 1
IDE 1.6.7 / esp8266 git core
// 11.B
===> mqtt connected
Sending payload: {"startMills":5267,"rand":11425048,"FreeHeap":46240,"RSSI":-55} length: 63
Publish ok
Sending payload: {"startMills":10313,"rand":706392399,"FreeHeap":46224,"RSSI":-55} length: 65
Publish ok
14 - mode : B - rssi : 31 - peakToPeak : 1
not connected..........
8 - mode : B - rssi : 31 - peakToPeak : 1
not connected...........
8 - mode : B - rssi : 31 - peakToPeak : 1
not connected..........
8 - mode : B - rssi : 31 - peakToPeak : 1
not connected...
===> mqtt connected
Sending payload: {"startMills":5271,"rand":1532520306,"FreeHeap":46224,"RSSI":-51} length: 65
Publish ok
Sending payload: {"startMills":10311,"rand":1109770069,"FreeHeap":46224,"RSSI":-51} length: 66
Publish ok
13 - mode : B - rssi : 31 - peakToPeak : 1
not connected...........
8 - mode : B - rssi : 31 - peakToPeak : 1
not connected..........
�