Arduino UNO, esp 8266 a načtení hodnot z openweathermap

Odpovědět
CrocodilusCZ
Příspěvky: 2
Registrován: 07 črc 2019, 15:27
Reputation: 0

Arduino UNO, esp 8266 a načtení hodnot z openweathermap

Příspěvek od CrocodilusCZ » 07 črc 2019, 15:37

Ahoj, potřeboval bych poradit. Přes arduino s připojeným ESP 8266 už hodnoty nahrávat na thingspeak umím.

Teď bych rád zvládl vyčíst data z openweathermap. Mají na to připravené API, takže mám vytvořený string
http://api.openweathermap.org/data/2.5/ ... pid=API_ID

který když zkopíruju do prohlížeče tak mi vyhodí data.

Potřeboval bych ale upravit program tak, aby data neodesílal na server ale naopak z něj četl.

Rád bych aby se mi vypsal json do serial monitoru..

Dokázal by mě prosím někdo nakopnout správným směrem? (O tom, že můžu programovat přímo ESP vím, ale to nechci. Nestačily by mi piny pro budoucí rozvoj který teoreticky plánuju...)

Předem moc děkuji za radu!

Kód: Vybrat vše

#include <SoftwareSerial.h>
#include "DHT.h"
#define RX 10
#define TX 11
#define DHTPIN 8 
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);

String AP = "cenzurováno";       // CHANGE ME
String PASS = "cenzurováno"; // CHANGE ME
String API = "cenzurováno";   // CHANGE ME
String HOST = "api.openweathermap.org";
String PORT = "443";
String CITY = "Prague";
String COUNTRY ="CZ";
String APIWOM ="cenzurováno";
int countTrueCommand;
int countTimeCommand; 
boolean found = false; 
int valSensor = 1;
SoftwareSerial esp8266(RX,TX); 
 
  
void setup() {
  Serial.begin(9600);
  esp8266.begin(115200);
  sendCommand("AT",5,"OK");
  sendCommand("AT+CWMODE=1",5,"OK");
  sendCommand("AT+CWJAP=\""+ AP +"\",\""+ PASS +"\"",20,"OK");
  Serial.println("KY-015 test - temperature and humidity-test:");
}
void loop() {
  
  float t = dht.readTemperature();
  float h = dht.readHumidity();
   
  
 valSensor = getSensorData();
 String readData = "http://" + String(HOST)+ "/data/2.5/forecast?q" +"="+String(CITY)+ "," +String(COUNTRY) +"&cnt=3&appid=" +String(APIWOM); 
 sendCommand("AT+CIPMUX=1",5,"OK");
 sendCommand("AT+CIPSTART=0,\"TCP\",\""+ HOST +"\","+ PORT,15,"OK");
 sendCommand("AT+CIPSEND=0," +String(readData.length()+4),4,">");
 esp8266.println(readData);delay(1500);countTrueCommand++;
 sendCommand("AT+CIPCLOSE=0",5,"OK");
 Serial.println(readData);
 Serial.println(t);
}
int getSensorData(){
return random(1000); // Replace with 
}      

void sendCommand(String command, int maxTime, char readReplay[]) {
  Serial.print(countTrueCommand);
  Serial.print(". at command => ");
  Serial.print(command);
  Serial.print(" ");
  while(countTimeCommand < (maxTime*1))
  {
    esp8266.println(command);//at+cipsend
    if(esp8266.find(readReplay))//ok
    {
      found = true;
      break;
    }
  
    countTimeCommand++;
  }
  
  if(found == true)
  {
    Serial.println("OK!");
    countTrueCommand++;
    countTimeCommand = 0;
  }
  
  if(found == false)
  {
    Serial.println("Fail!");
    countTrueCommand = 0;
    countTimeCommand = 0;
  }
  
  found = false;
 
 
 }

marh
Příspěvky: 28
Registrován: 19 bře 2018, 15:13
Reputation: 0

Re: Arduino UNO, esp 8266 a načtení hodnot z openweathermap

Příspěvek od marh » 07 črc 2019, 20:56

Zdravím

pozri https://www.arduinoslovakia.eu/blog/201 ... 66?lang=cs
Nezabudni na knižnice a najmä pre JSON na analýzu(parse) textu.
JSON odpoveď je väčšinou na WEBE, ktorá začínajú na API

Je to JSON tak preto knižnica. Niektoré WEBY vracajú len čistý text, ktorý stačí len odoslať na sériový port.

Stačí vedieť ako funguje JSON a tak hľadať určitý text čo vráti stránka.
--
Druhá rada je PHP skript na svojom webe(zadarmo) a cez neho načítať len text.
Na webe máš podporu PHP/ databázy atď.
https://arduino.cz/forum/tema/arduino-j ... a-stringu/
https://blog.dr-zelenka.cz/nodemcu-prij ... -z-webu-4/


Inak google
Ak niečo hľadať na určenej doméne CZ/SK/COM cez GOOGLE tak - napr. názov výrazu site:doména
napr.
kúpa auta site:sk
JSON arduino site:cz ,,,,každý výraz samostatne na WEBE, nemusia byť na jednej stránke
json+arduino site:cz ,,,,,znamienko PLUS ak sú oba výrazy na WEBE, hľadá oba výrazy


p.s.
môj príspevok pre THINGSPEAK
viewtopic.php?f=43&t=167&p=3316#p3316
Odosielanie/prijímanie/status=chat
to je
1. meranie teploty a odoslanie na Thingspeak
2. prijatie jednej poslednej teploty z poľa 8
3. odoslanie textu do STATUSU
4. Zistenie vonkajšej IP adresy a rozloženie textu na štyri samostatné čísla ---je to akoby DDNS server na zistenie vonkajšej IP,,,lebo v routeroch spoplatnili free DDNS

CrocodilusCZ
Příspěvky: 2
Registrován: 07 črc 2019, 15:27
Reputation: 0

Re: Arduino UNO, esp 8266 a načtení hodnot z openweathermap

Příspěvek od CrocodilusCZ » 08 črc 2019, 08:56

Díky za odpověď, musím na to mrknout, ještě jsem se k tomu nedostal. To je přesně ono, googlit umím, nicméně nacházím pouze příklady pro ESP a NODEMCU, takže bych si to musel přepsat pro arduino. No uvidím, zkusím a třeba to dopadne.

Každopádně díky.

PS: SZ jsem četl, ale je tu fce která mi znemožňuje napsat SZ, dokud se na fóru nezapojím do více diskuzí.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host