Assalamu’alaikum Wr. Wb.
Oke saya lanjutkan. remind lagi ini adalah seri berantai dari posting berikut ya
- https://tarecha.wordpress.com/2015/10/26/project-raspberry-pi/
- https://tarecha.wordpress.com/2017/06/05/project-weather-logger-part-1/
- https://tarecha.wordpress.com/2017/06/26/project-weather-logger-part-2-tambahan-sensor-tekanan-udara/
- https://tarecha.wordpress.com/2017/07/01/project-weather-logger-part-3-komunikasi-udp/
- https://tarecha.wordpress.com/2017/07/15/project-weather-logger-part-4-simpan-di-server-mysql/
- https://tarecha.wordpress.com/2017/07/24/project-weather-logger-part-5-view-data-dan-export/
- https://tarecha.wordpress.com/2017/07/25/project-weather-logger-part-6-plot-graphic/
- https://tarecha.wordpress.com/2017/07/29/project-weather-logger-part-7-ngrok-http-tunneling/
setelah beberapa saat humidity dari sensor DHT drop menjadi 1.4 %. lalu saya perbaiki dengan di solder lagi, mungkin karena sensornya kena panas jadi dia kembali normal lagi. setelah beberapa saat drop lagi. saya yakin ini bukan soal softwarenya, dan setelah cari-cari memang sensor DHT22 ini sensor murah, jadi ya gak bisa perform lama.salah satu keterangan di forum berikut . https://arduino.stackexchange.com/questions/17237/humidity-values-returned-by-dht22-sensors-failing-after-some-time
jadi saya beli lagi sensor BME280 dan node mcu 1 unit lagi. dan mengganti seluruh codingnya jadi 3 data saja, humidity, temperature, dan pressure. tinggal edit2 sedikit sih.
kurang lebih mirip sensor bmp 280, alamatnya juga diganti, dibrary dari adafruit librarynya bisa didownload dari sini https://learn.adafruit.com/adafruit-bme280-humidity-barometric-pressure-temperature-sensor-breakout/wiring-and-test
#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h> Adafruit_BME280 bme; // I2C WiFiUDP Udp; byte localUdpPort = 80; // local port to listen on char incomingPacket[255]; // buffer for incoming packets char replyPacket[255]; //untuk server const char* ssid = "tarecha"; const byte buzzerPin = D8; const char* password = "12345678a"; const String aHostname = "N1"; String dataSensor; String infoNode; unsigned long delayKirimDataSensor = 0; void setup() { pinMode(LED_BUILTIN, OUTPUT); pinMode(buzzerPin, OUTPUT); Serial.begin(9600); Wire.begin(D2, D1); //Sensor bme WiFi.begin(ssid, password); if (!bme.begin()) { Serial.println(F("Could not find a valid bme280 sensor, check wiring!")); while (1); } //bagian setup wifi Serial.printf("Connecting to %s ", ssid); WiFi.mode(WIFI_STA); WiFi.hostname(aHostname); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" connected"); Udp.begin(localUdpPort); infoNode = (String)"Restart reason : " + ESP.getResetReason().c_str() + "\n MAC : " + WiFi.macAddress().c_str() + "\n Hostname : " + WiFi.hostname().c_str() + "\n Signal Stringth : " + WiFi.RSSI() + "\n Local IP : " + WiFi.localIP().toString().c_str() + "\n Port : " + localUdpPort + "\n CPU Freq : " + String(ESP.getCpuFreqMHz()) + " MHz\n Sketch Size : " + ESP.getSketchSize() + "\n Free Space Sketch Size : " + ESP.getFreeSketchSpace(); Serial.println(infoNode); buzzerlampu(); } void buzzerlampu() { digitalWrite(LED_BUILTIN, LOW); digitalWrite(buzzerPin, HIGH); delay(500); digitalWrite(LED_BUILTIN, HIGH); digitalWrite(buzzerPin, LOW); delay(500); digitalWrite(LED_BUILTIN, LOW); digitalWrite(buzzerPin, HIGH); delay(500); digitalWrite(LED_BUILTIN, HIGH); digitalWrite(buzzerPin, LOW); delay(500); } void lampu() { digitalWrite(LED_BUILTIN, LOW); delay(500); digitalWrite(LED_BUILTIN, HIGH); delay(5); } void loop() { if (delayKirimDataSensor > 200000) { UpdateSensor(); Serial.println(dataSensor); delayKirimDataSensor = 0; } delayKirimDataSensor++; requestHandler(); } void UpdateSensor() { dataSensor = (String)aHostname + "," + bme.readHumidity()+ "," + bme.readTemperature() + "," + bme.readPressure()/100.0F; } void requestHandler() { int packetSize = Udp.parsePacket(); if (packetSize) { // receive incoming UDP packets Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort()); int len = Udp.read(incomingPacket, 255); if (len > 0) { incomingPacket[len] = 0; } Serial.printf("UDP packet contents: %s\n", incomingPacket); if (incomingPacket[0] == 'd') //get data { dataSensor.toCharArray(replyPacket, 255); } else if (incomingPacket[0] == 'i') //get info sensor { infoNode.toCharArray(replyPacket, 255); } else if (incomingPacket[0] == 'r') //perintah restart { String perintah = (String)"Terima udp perintah restart dari "+ Udp.remoteIP().toString().c_str(); perintah.toCharArray(replyPacket, 255); Serial.println(perintah); Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(replyPacket); Udp.endPacket(); digitalWrite(buzzerPin, HIGH); digitalWrite(LED_BUILTIN, LOW); delay(10000); ESP.restart(); } else { String lain = "masuk else"; lain.toCharArray(replyPacket, 255); } Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(replyPacket); Udp.endPacket(); Serial.printf("isi reply packet %s\n", replyPacket); lampu(); //nyalakan lampu biru setiap kirim data } }
kode lainnya tinggal penyesuaian saja dihilangkan temperature dht nya karena gk pakai sensor tersebut.
hasilnya sebagai berikut. nanti code terakhirnya saya svn kan saja, saya gk bisa pakai git he he.
dan jadinya seperti ini jadi 3 data saja. schematiknya tetap sama. saya gk jadi pakai yang baru. yang node sudah jadi lama saya upload ulang dan ganti sensor bme 280 saja. sedangkan node satunya mau saya pakai remote reboot saja untuk ikut kompetisi di hackster.io
oh ya soal sync data ke slave server saya belum bisa. masih gagal ketika koneksi putus dan ada lagi langsung lanjutkan sync data. jadi nanti saja saya posting kalau sudah berhasil. tinggal sync data doank sih. klo udah ya selesai. klo mau ya bisa ditambahkan perbandingan suhu di kota A dan di kota B dalam bentuk grafik. biar tahu perbandingannya.
oke udah ya
Wassabamu’alaikum Wr. Wb.