ESP8266 inlagda GPS-position till Adafruit IO (3 / 4 steg)
Steg 3: Ladda upp koden - kopiera och klistra in koden i du Arduino IDE
< p > #include "Adafruit_MQTT.h" / / Adafruit MQTT bibliotek < br > #include "Adafruit_MQTT_Client.h" / / Adafruit MQTT bibliotek < /p >< p > #include "ESP8266WiFi.h" / / ESP8266 bibliotek
#include < Adafruit_ssd1306syp.h >> / / Adafruit Oled bibliotek för visning < /p >< p > #include < TinyGPS ++ .h > / / små GPS Plus bibliotek < /p >< p > #include < SoftwareSerial.h > / / seriell mjukvarubibliotek så vi kan använda stift för kommunikation med GPS-modul < /p >< p > #define SDA_PIN 4 / / användningsområden GPIO stift 4(SDA) och 5(SCL) av ESP8266 Adafruit fjäder
#define SCL_PIN 5 / / även känd som stift D1(SCL) och D2(SDA) av NodeMCU ESP-12
Adafruit_ssd1306syp display(SDA_PIN,SCL_PIN); Ställ in OLED uppvisning stift < /p >< p > statisk const int RXPin = 12, TXPin = 13. Ublox 6m GPS-modulen till stift 12 och 13
statisk const uint32_t GPSBaud = 9600; Ublox GPS standard överföringshastigheten är 9600 < /p >< p > TinyGPSPlus gps; Skapa en instans av objektet TinyGPS ++ kallas gps
SoftwareSerial ss (RXPin, TXPin); Seriell anslutning till GPS-enheten < /p >< p > const double HOME_LAT = **. ***; Här anger du din latitud och longitud
CONST double HOME_LNG =-**. ***; att spåra hur långt bort den "Dog" är hemifrån < /p >< p > / *** WiFi tillträde punkt *** / < /p >< p > #define WLAN_SSID "***" / / Ange din router SSID
#define WLAN_PASS "***" / / Ange din router lösenord < /p >< p > / *** Adafruit.io Setup *** / < /p >< p > #define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883 / / använda 8883 för SSL
#define AIO_USERNAME "***" / / Ange ditt användarnamn på Adafruit IO
#define AIO_KEY "***" / / Ange din Adafruit IO nyckel < /p >< p > / *** Global stat (du inte behöver ändra på detta!) *** / < /p >< p > WiFiClient kunden. Skapa en ESP8266 WiFiClient klass för att ansluta till MQTT servern. < /p >< p > const char MQTT_SERVER [] PROGMEM = AIO_SERVER; Lagra MQTT servern, användarnamn och lösenord i flash-minnet.
CONST char MQTT_USERNAME [] PROGMEM = AIO_USERNAME;
CONST char MQTT_PASSWORD [] PROGMEM = AIO_KEY; < /p >< p > / / Setup klassen MQTT klienten av bortgång i WiFi klienten och MQTT server och logga in detaljer.
Adafruit_MQTT_Client mqtt (& client, MQTT_SERVER, AIO_SERVERPORT, MQTT_USERNAME, MQTT_PASSWORD); < /p >< p > / *** Feeds *** < /p >< p > / Setup ett foder som heter "gpslat" för publicering.
Meddelande MQTT banor för AIO följa form: /feeds/ / / detta foder behövs inte, bara installera om du vill se den
CONST char gpslat_FEED [] PROGMEM = AIO_USERNAME "/ feeds/gpslat";
Adafruit_MQTT_Publish gpslat = Adafruit_MQTT_Publish (& mqtt, gpslat_FEED); < /p >< p > / / Setup ett foder som heter "gpslng" för publicering.
Meddelande MQTT banor för AIO följa form: /feeds/ / / detta foder behövs inte, bara installera om du vill se den
CONST char gpslng_FEED [] PROGMEM = AIO_USERNAME "/ feeds/gpslng";
Adafruit_MQTT_Publish gpslng = Adafruit_MQTT_Publish (& mqtt, gpslng_FEED); < /p >< p > / / Setup ett foder som heter "gps" för publicering.
Meddelande MQTT banor för AIO följa form: /feeds/
CONST char gps_FEED [] PROGMEM = AIO_USERNAME "/ feeds/gpslatlng/csv"; CSV = kommatecken separerade värden
Adafruit_MQTT_Publish gpslatlng = Adafruit_MQTT_Publish (& mqtt, gps_FEED); < /p >< p > / *** / < /p >< p > void setup()
{
Serial.BEGIN(115200); Konfigurera seriell Comm för Serial Monitor @ 115200 baud
WiFi.mode(WIFI_STA); Ställa in ESP8266 som en wifi station
WiFi.disconnect(); Koppla bort om det behövs
Delay(100); kort fördröjning
display.Initialize(); init OLED Visa
display.Clear(); Tydlig OLED-skärm
display.setTextSize(1); Ställ in OLED textstorlek för små
display.setTextColor(WHITE); Ange OLED färg till vitt
display.setCursor(0,0); Ställ in markören till 0,0
display.println ("Adafruit IO GPS");
display.println ("Tracker");
display.Print("---");
display.Update(); Uppdatera visningen
Delay(1000); Paus X sekunder
SS.BEGIN(GPSBaud); Som mjukvaran följetong Comm hastigheten till 9600
display.Print ("ansluter till WiFi");
display.Update(); < /p >< p > WiFi.begin (WLAN_SSID, WLAN_PASS); Starta en WiFi-anslutning och ange SSID och lösenord
medan (WiFi.status()! = WL_CONNECTED)
{/ / Väntan på wifi-anslutning, Visa "..."
Delay(500);
display.Print(".");
display.Update();
}
display.println("Connected");
display.Update();
} / / Slutet Setup < /p >< p > void loop() {< /p >< p > smartDelay(500); / / uppdatering GPS-data TinyGPS behöver matas ofta
MQTT_connect(); Köra proceduren att ansluta till Adafruit IO MQTT < /p >< p > flyta Distance_To_Home; variabel att lagra avstånd till hem
flyta GPSlat = (gps.location.lat()); variabel att lagra latitude
flyta GPSlng = (gps.location.lng()); variabel att lagra longitud
flyta GPSalt = (gps.altitude.feet()); variabel att lagra höjd
Distance_To_Home = (osignerade långa) TinyGPSPlus::distanceBetween (gps.location.lat (), gps.location.lng (), HOME_LAT, HOME_LNG); Fråga liten GPS för att beräkna avståndet till hem
display.Clear();
display.setCursor(0,0);
display.println F ("GPS Tracking").
display.Print("---");
display.Update(); < /p >< p > display.print ("GPS Lat:");
display.println(GPS.location.lat(), 6); Visa latitud till 6 decimaler
display.Print ("GPS Lon:");
display.println(GPS.location.LNG(), 6); Visa longitud till 6 decimaler
display.Print ("avstånd:");
display.println(Distance_To_Home); Avståndet till hem mätt i meter
display.Update(); < /P >< p > / / *** kombinera Data att skicka till Adafruit IO ***
Här måste vi kombinera hastighet, latitud, longitud, höjd i en variabel strängbuffert att skicka till Adafruit
char gpsbuffer [30]. Kombinera latitud, longitud, höjd i en buffert av storlek X
char * p = gpsbuffer; Skapa en buffert för att lagra GPS information att ladda upp till Adafruit IO < /p >< p > dtostrf (Distance_To_Home, 3, 4, p); Konvertera avstånd till hem till en sträng variabel och lägga till bufferten
p += strlen(p);
p[0] = ','; p ++;
dtostrf (GPSlat, 3, 6, p); Konvertera GPSlat(latitude) till en strängvariabel och lägga till bufferten
p += strlen(p);
p[0] = ','; p ++;
dtostrf (GPSlng, 3, 6, p); Konvertera GPSlng(longitude) till en strängvariabel och lägga till bufferten
p += strlen(p);
p[0] = ','; p ++;
dtostrf (GPSalt, 2, 1, p); Konvertera GPSalt(altimeter) till en strängvariabel och lägga till bufferten
p += strlen(p);
p [0] = 0; null avsluta, slutet av bufferten array < /p >< p > om ((GPSlng! = 0) & & (GPSlat! = 0)) / / om GPS longitud alternativt latitud inte är lika med noll sedan publicera
{
display.println ("skickar GPS-Data");
display.Update();
gpslatlng.publish(gpsbuffer); publicera kombineras Data till Adafruit IO
Serial.println(gpsbuffer);
}
gpslng.publish(GPSlng,6); Publicera GPS longitud till Adafruit IO
om (! gpslat.publish(GPSlat,6)) / / publicera GPS latitud till Adafruit IO
{
display.println(F("failed")); Om det misslyckades med att publicera, skriva ut misslyckades
} annat
{
display.println(gpsbuffer);
display.println F ("Data skickas!").
}
display.Update();
Delay(1000);
om (millis() > 5000 & & gps.charsProcessed() < 10)
display.println (F ("nr GPS mottagna data: kontrollera ledningar"));
Vänta lite innan du skannar igen
display.Print("pausing...");
display.Update();
smartDelay(500); Foder TinyGPS ständigt
Delay(1000);
} < /p >< p > / / *** Smart dröjsmål - används för att mata TinyGPS *** < /p >< p > statisk void smartDelay (osignerade långa ms)
{
osignerade långa start = millis();
göra
{
samtidigt (ss.available())
GPS.encode(SS.Read());
} medan (millis() - start < ms);
} < /p >< p > / / *** MQTT Connect - förbinder med Adafruit IO ***
void MQTT_connect() {
int8_t ret;
om (mqtt.connected()) {återvänder;} / / stopp och återvända till Main Loop om redan ansluten till Adafruit IO
display.Print ("ansluter till MQTT... ");
display.Update(); < /p >< p > uint8_t återförsök = 3;
medan ((ret = mqtt.connect())! = 0) {/ / Anslut till Adafruit, Adafruit returnerar 0 om ansluten
display.println(mqtt.connectErrorString(ret)); Visa Adafruits svar
display.println ("försöker igen MQTT...");
mqtt.Disconnect();
display.Update();
Delay(5000); vänta X sekunder
återförsök--;
om (återförsök == 0) {/ / i princip dö och vänta på WatchDogTimer återställa mig
samtidigt (1).
}
}
display.println ("MQTT ansluten!");
display.Update();
Delay(1000);
} < /p >