Advertisement
djkvidp

Untitled

Nov 5th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.15 KB | None | 0 0
  1. #define ARDUINOJSON_ENABLE_PROGMEM 0
  2.  
  3. #include "Adafruit_BME280.h" //https://github.com/Takatsuki0204/BME280-I2C-ESP32
  4. #include <ArduinoJson.h> //https://github.com/bblanchon/ArduinoJson
  5. #include <WiFi.h>
  6.  
  7. const char* ssid = "********";
  8. const char* password = "********";
  9. String CityID = "3067696"; //Prague, Czech republic
  10. String APIKEY = "68df765768f51f8db43772fbf9c7d6cb";
  11. #define ALTITUDE 216.0 // praha
  12.  
  13. #define I2C_SDA 27
  14. #define I2C_SCL 26
  15. #define LED_PIN 2
  16. #define BME280_ADDRESS 0x76 //If the sensor does not work, try the 0x77 address as well
  17.  
  18. float temperature = 0;
  19. float humidity = 0;
  20. float pressure = 0;
  21. int weatherID = 0;
  22.  
  23. Adafruit_BME280 bme(I2C_SDA, I2C_SCL);
  24.  
  25. WiFiClient client;
  26. char* servername ="api.openweathermap.org"; // remote server we will connect to
  27. String result;
  28.  
  29. int iterations = 1800;
  30. String weatherDescription ="";
  31. String weatherLocation = "";
  32. float Temperature;
  33.  
  34. void setup()
  35. {
  36. pinMode(LED_PIN, OUTPUT);
  37.  
  38. Serial.begin(115200);
  39.  
  40. initSensor();
  41.  
  42. connectToWifi();
  43. }
  44.  
  45. void loop() {
  46.  
  47. delay(2000);
  48.  
  49. if(iterations == 1800)//We check for updated weather forecast once every hour
  50. {
  51. getWeatherData();
  52. printWeatherIcon(weatherID);
  53. iterations = 0;
  54. }
  55.  
  56. getTemperature();
  57. sendTemperatureToNextion();
  58.  
  59. getHumidity();
  60. sendHumidityToNextion();
  61.  
  62. getPressure();
  63. sendPressureToNextion();
  64.  
  65. iterations++;
  66.  
  67. blinkLED();
  68. }
  69.  
  70. void connectToWifi()
  71. {
  72. WiFi.enableSTA(true);
  73.  
  74. delay(2000);
  75.  
  76. WiFi.begin(ssid, password);
  77.  
  78. while (WiFi.status() != WL_CONNECTED) {
  79. delay(500);
  80. Serial.print(".");
  81. }
  82. }
  83.  
  84. void initSensor()
  85. {
  86. bool status = bme.begin(BME280_ADDRESS);
  87. if (!status) {
  88. Serial.println("Could not find a valid BME280 sensor, check wiring!");
  89. while (1);
  90. }
  91. }
  92.  
  93. void blinkLED()
  94. {
  95. digitalWrite(LED_PIN,HIGH);
  96. delay(100);
  97. digitalWrite(LED_PIN,LOW);
  98. }
  99.  
  100. float getTemperature()
  101. {
  102. temperature = bme.readTemperature();
  103. }
  104.  
  105. float getHumidity()
  106. {
  107. humidity = bme.readHumidity();
  108. }
  109.  
  110. float getPressure()
  111. {
  112. pressure = bme.readPressure();
  113. pressure = bme.seaLevelForAltitude(ALTITUDE,pressure);
  114. pressure = pressure/100.0F;
  115. }
  116.  
  117. void getWeatherData() //client function to send/receive GET request data.
  118. {
  119. String result ="";
  120. WiFiClient client;
  121. const int httpPort = 80;
  122. if (!client.connect(servername, httpPort)) {
  123. return;
  124. }
  125. // We now create a URI for the request
  126. String url = "/data/2.5/forecast?id="+CityID+"&units=metric&cnt=1&APPID="+APIKEY;
  127.  
  128. // This will send the request to the server
  129. client.print(String("GET ") + url + " HTTP/1.1\r\n" +
  130. "Host: " + servername + "\r\n" +
  131. "Connection: close\r\n\r\n");
  132. unsigned long timeout = millis();
  133. while (client.available() == 0) {
  134. if (millis() - timeout > 5000) {
  135. client.stop();
  136. return;
  137. }
  138. }
  139.  
  140. // Read all the lines of the reply from server
  141. while(client.available()) {
  142. result = client.readStringUntil('\r');
  143. }
  144.  
  145. result.replace('[', ' ');
  146. result.replace(']', ' ');
  147.  
  148. char jsonArray [result.length()+1];
  149. result.toCharArray(jsonArray,sizeof(jsonArray));
  150. jsonArray[result.length() + 1] = '\0';
  151.  
  152. StaticJsonBuffer<1024> json_buf;
  153. JsonObject &root = json_buf.parseObject(jsonArray);
  154. if (!root.success())
  155. {
  156. Serial.println("parseObject() failed");
  157. }
  158.  
  159. String location = root["city"]["name"];
  160. String temperature = root["list"]["main"]["temp"];
  161. String weather = root["list"]["weather"]["main"];
  162. String description = root["list"]["weather"]["description"];
  163. String idString = root["list"]["weather"]["id"];
  164. String timeS = root["list"]["dt_txt"];
  165.  
  166. weatherID = idString.toInt();
  167. Serial.print("\nWeatherID: ");
  168. Serial.print(weatherID);
  169. endNextionCommand(); //We need that in order the nextion to recognise the first command after the serial print
  170.  
  171. }
  172.  
  173. void showConnectingIcon()
  174. {
  175. Serial.println();
  176. String command = "weatherIcon.pic=3";
  177. Serial.print(command);
  178. endNextionCommand();
  179. }
  180.  
  181. void sendHumidityToNextion()
  182. {
  183. String command = "humidity.txt=\""+String(humidity,1)+"\"";
  184. Serial.print(command);
  185. endNextionCommand();
  186. }
  187.  
  188. void sendTemperatureToNextion()
  189. {
  190. String command = "temperature.txt=\""+String(temperature,1)+"\"";
  191. Serial.print(command);
  192. endNextionCommand();
  193. }
  194.  
  195. void sendPressureToNextion()
  196. {
  197. String command = "pressure.txt=\""+String(pressure,1)+"\"";
  198. Serial.print(command);
  199. endNextionCommand();
  200. }
  201.  
  202. void endNextionCommand()
  203. {
  204. Serial.write(0xff);
  205. Serial.write(0xff);
  206. Serial.write(0xff);
  207. }
  208.  
  209. void printWeatherIcon(int id)
  210. {
  211. switch(id)
  212. {
  213. case 800: drawClearWeather(); break;
  214. case 801: drawFewClouds(); break;
  215. case 802: drawFewClouds(); break;
  216. case 803: drawCloud(); break;
  217. case 804: drawCloud(); break;
  218.  
  219. case 200: drawThunderstorm(); break;
  220. case 201: drawThunderstorm(); break;
  221. case 202: drawThunderstorm(); break;
  222. case 210: drawThunderstorm(); break;
  223. case 211: drawThunderstorm(); break;
  224. case 212: drawThunderstorm(); break;
  225. case 221: drawThunderstorm(); break;
  226. case 230: drawThunderstorm(); break;
  227. case 231: drawThunderstorm(); break;
  228. case 232: drawThunderstorm(); break;
  229.  
  230. case 300: drawLightRain(); break;
  231. case 301: drawLightRain(); break;
  232. case 302: drawLightRain(); break;
  233. case 310: drawLightRain(); break;
  234. case 311: drawLightRain(); break;
  235. case 312: drawLightRain(); break;
  236. case 313: drawLightRain(); break;
  237. case 314: drawLightRain(); break;
  238. case 321: drawLightRain(); break;
  239.  
  240. case 500: drawLightRainWithSunOrMoon(); break;
  241. case 501: drawLightRainWithSunOrMoon(); break;
  242. case 502: drawLightRainWithSunOrMoon(); break;
  243. case 503: drawLightRainWithSunOrMoon(); break;
  244. case 504: drawLightRainWithSunOrMoon(); break;
  245. case 511: drawLightRain(); break;
  246. case 520: drawModerateRain(); break;
  247. case 521: drawModerateRain(); break;
  248. case 522: drawHeavyRain(); break;
  249. case 531: drawHeavyRain(); break;
  250.  
  251. case 600: drawLightSnowfall(); break;
  252. case 601: drawModerateSnowfall(); break;
  253. case 602: drawHeavySnowfall(); break;
  254. case 611: drawLightSnowfall(); break;
  255. case 612: drawLightSnowfall(); break;
  256. case 615: drawLightSnowfall(); break;
  257. case 616: drawLightSnowfall(); break;
  258. case 620: drawLightSnowfall(); break;
  259. case 621: drawModerateSnowfall(); break;
  260. case 622: drawHeavySnowfall(); break;
  261.  
  262. case 701: drawFog(); break;
  263. case 711: drawFog(); break;
  264. case 721: drawFog(); break;
  265. case 731: drawFog(); break;
  266. case 741: drawFog(); break;
  267. case 751: drawFog(); break;
  268. case 761: drawFog(); break;
  269. case 762: drawFog(); break;
  270. case 771: drawFog(); break;
  271. case 781: drawFog(); break;
  272.  
  273. default:break;
  274. }
  275. }
  276.  
  277. void drawFog()
  278. {
  279. String command = "weatherIcon.pic=13";
  280. Serial.print(command);
  281. endNextionCommand();
  282. }
  283.  
  284. void drawHeavySnowfall()
  285. {
  286. String command = "weatherIcon.pic=8";
  287. Serial.print(command);
  288. endNextionCommand();
  289. }
  290.  
  291. void drawModerateSnowfall()
  292. {
  293. String command = "weatherIcon.pic=8";
  294. Serial.print(command);
  295. endNextionCommand();
  296. }
  297.  
  298. void drawLightSnowfall()
  299. {
  300. String command = "weatherIcon.pic=11";
  301. Serial.print(command);
  302. endNextionCommand();
  303. }
  304.  
  305. void drawHeavyRain()
  306. {
  307. String command = "weatherIcon.pic=10";
  308. Serial.print(command);
  309. endNextionCommand();
  310. }
  311.  
  312. void drawModerateRain()
  313. {
  314. String command = "weatherIcon.pic=6";
  315. Serial.print(command);
  316. endNextionCommand();
  317. }
  318.  
  319. void drawLightRain()
  320. {
  321. String command = "weatherIcon.pic=6";
  322. Serial.print(command);
  323. endNextionCommand();
  324. }
  325.  
  326. void drawLightRainWithSunOrMoon()
  327. {
  328. String command = "weatherIcon.pic=7";
  329. Serial.print(command);
  330. endNextionCommand();
  331. }
  332. void drawThunderstorm()
  333. {
  334. String command = "weatherIcon.pic=3";
  335. Serial.print(command);
  336. endNextionCommand();
  337. }
  338.  
  339. void drawClearWeather()
  340. {
  341. String command = "weatherIcon.pic=4";
  342. Serial.print(command);
  343. endNextionCommand();
  344. }
  345.  
  346. void drawCloud()
  347. {
  348. String command = "weatherIcon.pic=9";
  349. Serial.print(command);
  350. endNextionCommand();
  351. }
  352.  
  353. void drawFewClouds()
  354. {
  355. String command = "weatherIcon.pic=5";
  356. Serial.print(command);
  357. endNextionCommand();
  358. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement