Created
February 16, 2016 15:31
-
-
Save chaeplin/8ff93aedb75266d644d2 to your computer and use it in GitHub Desktop.
wifi_test.ino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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(); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
//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