DIY wereld klok en weer bot (Arduino + ESP8266) (3 / 3 stap)

Stap 3: Code

Je moet voor het begin ssid en pass van uw netwerk, API-sleutel van OpenWeatherMap en TimezoneDB. Deze snaren aan het begin van de code te definiëren.

 #define ssid "" //write your ssid #define PASS "" //write your pass #define owmIP "" //OpenWeatherMap api IP#define timeIP "" //timezoneDB api IP #define owmKey ""; //OpenWeatherMap api Key #define timeKey ""; //timezoneDB api Key 

Daarna definiëren uw LED en LCD pinnen.

 int rainLED[] = {31, 33, 35}; int eyesLED [] = {37, 39}; int sunLED = 41;<br>int cloudLED = 45; int thunderLED = 43; LiquidCrystal lcd(8, 9, 10, 11, 12, 13); 

In setup start LCD-scherm. seriële communicatie tussen de Arduino en PC (voor het kiezen van stad/land) en Arduino en ESP8266. Ook beginnen de SDA/SCL-communicatie met uw RTC-module. Baud-rate van de hangt af van het model van de ESP8266. ESP8266 gebruikt in dit voorbeeld maakt gebruik van 115200 baud-rate.

 Wire.begin(); lcd.begin(16, 2); Serial.begin(9600); Serial1.begin(115200); 

Als er een data in het EEPROM geheugen gebruikt die gegevens, als niet voor de nieuwe gegevens.

 if (EEPROM.read(0) == 255) { Serial.println("ENTER CITY NAME (city or city,country):"); setLCD("ENTER CITY NAME", ""); bool isTxt = false; int br = 0; while (!isTxt) { if (Serial.available() > 0) { while (Serial.available() > 0) { char c = char(Serial.read()); if (c != '\n' && c != '\r') { city += c; EEPROM.write(br, byte(c)); ++br; } delay(2); } isTxt = true; } } } else { int br = 0; while (EEPROM.read(br) != 255) { city += char(EEPROM.read(br)); ++br; } } 

De ESP8266 verbinden met het netwerk met behulp van de AT-commando's. Aangezien ESP8266 zal worden verbinding met twee webservices moet u opdracht AT + CIPMUX = 1 toe aan de ESP8266.

 while (true) { Serial1.println("AT+RST"); delay(5000); if (Serial1.find("OK")) { Serial.println("ESP8266 OK"); setLCD("ESP8266 OK", "BOOTING UP..."); if (connectWiFi()) { Serial.println("WIFI OK"); setLCD("WIFI OK", ""); } break; } } Serial1.println("AT+CIPMUX=1"); 

connectWiFi functie:

 boolean connectWiFi() { Serial1.println("AT+CWMODE=1"); delay(2000); String cmd = "AT+CWJAP=\""; cmd += ssid; cmd += "\",\""; cmd += PASS; cmd += "\""; Serial1.println(cmd); delay(5000); if (Serial1.find("OK")) { return true; } else { return false; } } 

Verbinding maken met de OpenWeatherMap-service:

 String cmd = "AT+CIPSTART=0,\"TCP\",\""; cmd += owmIP; cmd += "\",80"; Serial1.println(cmd); delay(2000); if (Serial1.find("Error")) { return; } cmd = "GET /data/2.5/weather?q=" + city + "&appid=" + owmKey + "&units=metric"; cmd += "\r\n";<br> Serial1.print("AT+CIPSEND=0,"); Serial1.println(cmd.length()); if (Serial1.find(">")) { Serial1.print(cmd); ... } 

Verbinding maken met de TimezoneDB-service:

 String cmd = "AT+CIPSTART=1,\"TCP\",\""; cmd += timeIP; cmd += "\",80"; Serial1.println(cmd); delay(2000); if (Serial1.find("Error")) { return; } cmd = "GET /?key=" + timeKey + "&lat=" + lat + "&lng=" + lng + "&format=json HTTP/1.1\r\nHost: api.timezonedb.com\r\n\r\n"; cmd += "\r\n"; Serial1.print("AT+CIPSEND=1,"); Serial1.println(cmd.length()); if (Serial1.find(">")) { Serial1.print(cmd); ... } 

Webservices gegevens retourneren in de indeling XML of JSON en er is een goede bibliotheek voor het ontleden van JSON in Arduino maar omdat er een probleem met het krijgen van de hele respone-tekenreeks moeten we alle gegevens handmatig met behulp van de functie find().

 while (!Serial1.find("\"lon\":")) { if ((millis() - currentMillis) > 10000) { again = true; return; } } while (true) { if (Serial1.available()) { char c = Serial1.read(); if (c == ',') break; lng += c; } } ... 

Afhankelijk van het weer gegevens kreeg van OWM dienst draaien LEDs in- of uitschakelen. Wippen is vrij lastig voor de regen effect omdat blauwe LEDs moeten worden draaien aan en uit (in voorbeeld elke seconde) asynchroon naar de rest van het programma (ze mogen niet blokkeren programma). U kunt millis() gebruiken om dat effect te bereiken. Deel van code verantwoordelijk voor het draaien van de LEDs als het normale regen in een gekozen stad:

 else if (description == "light rain") { if (isSun) { pinMode(sunLED, OUTPUT); digitalWrite(sunLED, HIGH); } pinMode(cloudLED, OUTPUT); pinMode(rainLED[rainDrop], OUTPUT); digitalWrite(cloudLED, HIGH); digitalWrite(rainLED[rainDrop], HIGH); if ((millis() - weatherTime) > 1000) { digitalWrite(rainLED[rainDrop], LOW); ++rainDrop; weatherTime = millis(); } 

Functies voor het opslaan en het krijgen van tijd van de RTC-module worden genomen van de verwijzing en ze zijn enigszins gewijzigd voor het tonen van gegevens naar het LCD-scherm. Gewijzigde deel van de returnTime() functie:

 char buffer1[10]; itoa(hour, buffer1, 10); char buffer2[10]; itoa(minute, buffer2, 10); if (hour < 10 && minute < 10) { return currentTime = country + " " + weekDay + " 0" + buffer1 + ":0" + buffer2; } else if (hour < 10) { return currentTime = country + " " + weekDay + " 0" + buffer1 + ":" + buffer2; } else if (minute < 10) { return currentTime = country + " " + weekDay + " " + buffer1 + ":0" + buffer2; } return currentTime = country + " " + weekDay + " " + buffer1 + ":" + buffer2; 

Volledige code voor dit project kan worden gevonden in een bijlage.

Ik hoop dat je genoten hebt van dit Instructable en ik dank u voor het lezen :) Als u vragen heeft over dit project hebben voel je vrij om contact met mij of vragen me in de commentaren :)

Gerelateerde Artikelen

DIY TiX klok

DIY TiX klok

hier is mijn instructable voor een DIY TiX klok.  Hij wordt aangedreven door een AVR microcontroller.  Het display is opgebouwd met behulp van een stukje reflector raster u vinden die betrekking hebben op office lichten, sommige gerookte perspex, een
Bouwen van een wereld klok

Bouwen van een wereld klok

Nou, ik keek rond mijn ongewenste stapel om te zien wat ik kon combineren voor een nieuw project, en wat ik vond was een oude wereldbol en een muur-thermometer dat voortdurend werd geplakt op 80 graden.  Leek me een goede combinatie voor een project!
Arduino ESP8266 Modbus TCP IP-Scada industriële Opto22

Arduino ESP8266 Modbus TCP IP-Scada industriële Opto22

Heeft de integratie van Arduino ESP8266 + Software Opto22, uitvoering van haar milieu scada dwars door IP en Modbus TCP Modbus RTU, het idee is om de uitvoering van deze hardware in de industrie voor zowel monitoring en controle.Meer informatie over
Zelfgemaakte Scara Robot Arm DIY robot Frame projecten Chassis Draw Arduino Control

Zelfgemaakte Scara Robot Arm DIY robot Frame projecten Chassis Draw Arduino Control

Zelfgemaakte Scara Robot Arm DIY robot Frame projecten Chassis Draw Arduino controleMaterialen:1 stk aluminiumlegering 245 x 42 x 12 mm1 stk aluminiumlegering 200 x 22 x 12 mm1 stk aluminiumlegering 100 x 160 x 12 mm voor bed1 stk stap motor 42 x 48
Kaart van de wereld klok Diy decoratie Kit

Kaart van de wereld klok Diy decoratie Kit

I 'm gonna tonen diy wereldkaart dat u gemakkelijk keuken wand- of sommige lege ruimten decoreren kunt.HTTP://WWW.EBAY.COM/ITM/WOODEN-WORLD-MAP-WALL-CLOCK-GLOBE-3-COUNTRY-TIME-PUZZLE-DIY-WALL-WORLD-CLOCKS-/221674887763?SSPAGENAME=STRK:MESE:ITStap 1:
Eenvoudige user-instelbare DIY Nixie Klok

Eenvoudige user-instelbare DIY Nixie Klok

Als eerste instructable van het jaar beheerd ik eindelijk mijn eeuwenlange nixie klok om project te voltooien.Nixies zijn ventiel neonbuizen, waar tien kathoden vorm van cijfers hebben en worden verlicht door plasma als hoogspanning door hen stroomt.
Arduino Esp8266 Post-gegevens naar Website

Arduino Esp8266 Post-gegevens naar Website

De ESP8266 WiFi Module is een zelfstandige SOC met geïntegreerd TCP/IP protocolstack die elke microcontroller toegang tot uw WiFi-netwerk geven kunt. Het biedt een compleet en self-contained Wi-Fi netwerken oplossing, zodat het ofwel de hosttoepassin
DIY Apple klok

DIY Apple klok

OK bestaat dus er geen als de klok van Apple.Echter kun je je eigen zeepbel van de retro-stijl klok van de vertoning in een geval van Apple oordopjes.Ik ga u tonen hoe te doen dat gewoon zitten krap.Stap 1: onderdelen You gonna sommige onderdelen nod
DIY digitale klok

DIY digitale klok

Hebben u ooit echt verveeld en enkele leuke DIY-project te doen nodig? Nou, heb je ooit gedacht over het maken van een super, geweldig, digitale klok die u kunt eigenlijk tijd met vertellen? Goed dan u moet echt volgt awesome. Veel plezier!Stap 1: ba
Cwik klok v1.0 - An Arduino Binary Clock

Cwik klok v1.0 - An Arduino Binary Clock

overzichtDit is een gids voor het opbouwen van een Arduino-aangedreven klok die LEDs gebruikt voor de weergave van een 24-uurs klok (uren en minuten) als binaire cijfers, een analoge meter wilt weergeven van de seconden, een schakelaar om te schakele
Nyan Bot - Arduino & Leddar

Nyan Bot - Arduino & Leddar

NYAN BOT PROJECTOp zoek naar een cool hands-on project om kinderen kennismaken met Robotica, sensoren en elementaire elektronica? Met behulp van de Arduino-platform en een LeddarOne sensor, deze familiezaak was een uitstekende gelegenheid om samen te
DIY beton:: Klok

DIY beton:: Klok

dit Instructable zal u tonen hoe te werpen een vezelversterkte concrete klok in een doos van melamine, met behulp van een schuim-knock-out naar de uitsparing van het mechanisme en de wijzers.Over glasvezel gewapend beton: CHENG D-FRC is een glasvezel
Verstandig klok 3 - geeky alarmklok Arduino gebaseerde

Verstandig klok 3 - geeky alarmklok Arduino gebaseerde

Wise klok 3 is een open-source, zeer hackable geeky klok die veel meer dan de tijd toont. Haar belangrijkste functie is het weergeven van gebruiker-bewerkbare offertes ontvangen van een SD-kaart (zoals die worden gebruikt in foto camera's).Wise klok
E-paper Display met Arduino/ESP8266

E-paper Display met Arduino/ESP8266

Hola inventores hoy voy een mostrarles como utilizar una pantalla de tinta electrónica con un Arduino o un ESP8266 via seriële de una manera muy sencilla.Las pantallas de tinta electrónica es como las que pueden encontrar nl dispositivos como el de A