Skicka sensordata (DHT11 & BMP180) till ThingSpeak med en Arduino, via kabel eller WiFi (ESP8266) (3 / 5 steg)
Steg 3: Ansluta till Thingspeak med hjälp av en ESP8266 WiFi modul
Tidigare presenterade internet-anslutningen gjordes via en kabel. Det finns dock en billig WiFi-modul som kan kopplas till Arduino: The ESP 8266.
ESP8266 är en billig WiFi modul. Tänk på att det behöver 3,3 Volt. Vissa modeller hävdar emellertid att 5 Volt tolerant. Jag la 2 kretsar som skulle kunna användas som spänningsomvandlare.
ESP8266 verkligen behöver sin egen 3,3 V källa som det nuvarande kommande från Arduino bara inte klippa det.
Det finns gott om information om hur du ansluter modulen, jag vill fokusera på programvara för att få en Thingspeak anslutning
SoftSerial biblioteket läggs för felsökning. Det är inte nödvändigt när progrem fungerar. Detsamma gäller för alla print uttalanden till serieporten programvara
Jag använder 3 analoga värden snarare än ett exempel med BMP108 och DHT11 som kräver bibliotek, så genomförandet av theESP8266 är lättare att följa. När du får det, är det lätt att genomföra andra sensorer. Se bara till att du slår alla utdata till en sträng
Nedan ett program för att ansluta 3 analoga sensorer till Thingspeak via en ESP8266 modul:
< en href = "https://nurdspace.nl/ESP8266" rel = "nofollow" > https://nurdspace.nl/ESP8266
< /a > / /
https://www.zybuluo.com/kfihihc/Note/31135
http://tminusarduino.blogspot.nl/2014/09/Experimenting-with-esp8266-5-WiFi-module.html
http://www.CSE.DMU.AC.uk/~sexton/ESP8266/
https://github.com/aabella/ESP8266-Arduino-Library/BLOB/Master/ESP8266abella/ESP8266aabella.h
http://contractorwolf.com/esp8266-WiFi-Arduino-Micro/
//**********************************************************
#include < SoftwareSerial.h >
int sensor_temp = A0;
int value_temp;
int sensor_light = A1;
int value_light;
int sensor_humid = A2;
int value_humid;
#define DEBUG falska //comment ut att ta bort debug medd
*--Hårdvara följetong
#define _baudrate 9600
*--Mjukvaran följetong
//
#define _rxpin 2
#define _txpin 3
SoftwareSerial debug (_rxpin, _txpin); RX, TX
*--IoT Information
#define SSID "[YOURSSID]"
#define PASS "[YOURPASSWORD]"
#define IP "184.106.153.149" / / ThingSpeak IP-adress: 184.106.153.149
GET /update? nyckel = [THINGSPEAK_KEY] & Fält1 = [data 1] & Fält2 = [data 2]...;
Sträng få = "GET /update? nyckel = [ThingSpeak_ (Skriv) API_KEY]";
void setup() {
Serial.BEGIN (_baudrate);
debug.BEGIN (_baudrate);
sendDebug("AT");
Delay(5000);
IF(Serial.find("OK"))
{
debug.println ("RECEIVED: OK\nData redo att skickas!");
connectWiFi();
}
}
void loop() {
value_temp = analogRead(sensor_temp);
value_light = analogRead(sensor_light);
value_humid = analogRead(sensor_humid);
Sträng temp = String(value_temp); / / slå heltal till en sträng
Sträng ljus = String(value_light); / / slå heltal till en sträng
Sträng humid=String(value_humid); / / slå heltal till en sträng
updateTS (temp, ljus, fuktigt);
Delay(3000); //
}
---uppdatera Thingspeak strängen med 3 värden
void updateTS (String T, sträng L, sträng H)
{
ESP8266 klient
Sträng cmd = "AT + CIPSTART = \"TCP\", \" ";// Setup TCP-anslutning
CMD + = IP;
CMD + = "\",80";
sendDebug(cmd);
Delay(2000);
om (Serial.find ("fel"))
{
debug.Print ("fått: Error\nExit1");
hemkomst.
}
CMD = få + "& Fält1 =" + T + "& Fält2 =" + L + "& field3 =" + H + "\r\n";
Serial.Print ("AT + CIPSEND =");
Serial.println (cmd.length());
om (Serial.find (">"))
{
debug.Print(">");
debug.Print(CMD);
Serial.Print(CMD);
}
annat
{
sendDebug ("AT + CIPCLOSE"); //close TCP anslutning
}
om (Serial.find("OK"))
{
debug.println ("fick: OK");
}
annat
{
debug.println ("fått: Error\nExit2");
}
}
void sendDebug(String cmd)
{
debug.Print ("Skicka:");
debug.println(CMD);
Serial.println(CMD);
}
Boolean connectWiFi()
{
Serial.println ("AT + CWMODE = 1"); //WiFi STA-läge - om "3" det är både klient- och AP
Delay(2000);
Ansluta till routern med AT + CWJAP = "SSID", "Lösenord";
Kontrollera om ansluten med AT + CWJAP?
Sträng cmd = "AT + CWJAP = \" "; Gå med accespoint
CMD + = SSID;
CMD + = "\", \ "";
CMD + = PASS;
CMD + = "\" ";
sendDebug(cmd);
Delay(5000);
IF(Serial.find("OK"))
{
debug.println ("RECEIVED: OK");
return true;
}
annat
{
debug.println ("RECEIVED: fel");
returnera false;
}
CMD = "AT + CIPMUX = 0" ;// Set enda anslutning
sendDebug (cmd);
om (Serial.find ("fel"))
{
debug.Print ("fick: fel");
returnera false;
}
}
OBS
I den senaste versionen av ESP8266 firmware AT + CIOBAUD stöds inte längre och returnerar fel.
Kommandot ersättning är AT + IPR. Se här för ytterligare detaljer:- www.esp8266.com/viewtopic.php?f=13&t=718
Mer Obs
Tydligen verkar på senare tid det finnas vissa människor upplever svårigheter eftersom de inte ansluter ESP8266 följetong hårdvaran utan mjukvaran följetong.
Detta program förväntar sig en ESP ansluten till hårdvara följetong