author

RimvydasP

69
Inbox View Profile
11Instructables95,951Views100CommentsLithuania

Tell us about yourself!

Achievements

100+ Comments Earned a bronze medal
10K+ Views Earned a bronze medal
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi, yes it is possible, but I don't have free time. I'm busy.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi Gianno,BME280 show incorrect humidity value. So I change DS18B20 to DHT22. But after two or three weeks it show incorrect value too. So I don't know best sensor to measure humidity outside.Check your DS18B20 sensor wires. Maybe wires get corrosion and connection goes bad. BME280 can be used to measure temperature. Yes it is possible read BME280 and the DS18B20 sensor (or the DHT22) and average value.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    I don't know. You have to check it rotating wind vane by hand. If it show correct wind direction it is al right, else it is not.

    Hi,I think your wind vane is rotating and don't hold position. You will need bigger rudder. Or you need increase friction to slow down rotation. I have another weather station similar like yours and wind direction show correctly. Maybe Wunderground it takes 5 minutes to average wind direction. So it show 16 direction. It is mine thoughts.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi, just download code again. Code was updated.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi Kevin, I just replace DS18b20 temperature sensor with DHT22. DHT22 for temperature and humidity, BME280 only for pressure. But I didn't update Instructables sketch.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi KVnVA,Thank you for your information.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi andreas.de.keersgieter,I think you will didn't find similar project as you want. So it will be more simple to modife mine code.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Sveikas, aš irgi neradau. Bet spėju su rasberry pi bus kas nors sukūręs.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi, Wunderground imperial system, Weathercloud - metric SI system. 1 mph is 0.447 m/s

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi JonathanP51, I think your BME280 sensor is bad. Your BME280 sensor with 4 or 6 pins ?

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi Knoxen,// 2.4km/h convert to miles is 1.4912 mph. 1.49 / 30 seconds = 0.0497. windSpeed = Rotations * 0.0497;

    View Instructable »
    • DIY Personal Weather  Station Monitor
      107 views
      1 favorites
      0 comments
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Remove this line >> ESP.restart(); What it is your main board ? Nodemcu ESP12 or Wemos ?

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Correct this line

    client.print("/ HTTP/1.1\r\nHost: rtupdate.wunderground.com:80\r\nConnection: close\r\n\r\n");

    //Correct this line client.print("/ HTTP/1.1\r\nHost: rtupdate.wunderground.com:80\r\nConnection: close\r\n\r\n");

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi Kevin, we need just wait.

    Hi ;)I just get message that ,,Weather Underground Sensor Signup will be temporarily unavailable for maintenance between Monday Jan. 27th and Wed. Jan. 29th." So we need to wait.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Oops, I don't modified one thing. Serial.print("DS18B20 = "); Serial.print(tempc_min); Serial.println(" C ");change to this >>> Serial.print("SHT10 = "); Serial.print(tempc_min); Serial.println(" C ");

    /* * Personnal Weather Station sketch for Wunderground.com Thingspeak.com and Weathercloud.net * * Main board: NodeMCU ESP12 * * Sensors: * Temperature, Humidity -SHT10, * Preasure - BME280, * Anenometer and wind direction - Davis 6410 * Rain gauge - Ventus W174 * * Last edit: 2020 01 09 * * https://www.instructables.com/NodeMCU-Wireless-Weather-Station/ */ #include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino/archive/master.zip#include <WiFiUdp.h>#include <ESP8266WiFiMulti.h>#include <SHT1x.h>//#include <DallasTemperature.h> // https://github.com/milesburton/Arduino-Temperature-Control-Library#include "cactus_io_BME280_I2C.h" // static.cactus.io/downloads/library/bme280/cactus_io_BME280_I2C.zip#include <SPI.h>#inc…

    see more »

    /* * Personnal Weather Station sketch for Wunderground.com Thingspeak.com and Weathercloud.net * * Main board: NodeMCU ESP12 * * Sensors: * Temperature, Humidity -SHT10, * Preasure - BME280, * Anenometer and wind direction - Davis 6410 * Rain gauge - Ventus W174 * * Last edit: 2020 01 09 * * https://www.instructables.com/NodeMCU-Wireless-Weather-Station/ */ #include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino/archive/master.zip#include <WiFiUdp.h>#include <ESP8266WiFiMulti.h>#include <SHT1x.h>//#include <DallasTemperature.h> // https://github.com/milesburton/Arduino-Temperature-Control-Library#include "cactus_io_BME280_I2C.h" // static.cactus.io/downloads/library/bme280/cactus_io_BME280_I2C.zip#include <SPI.h>#include <Wire.h>#include <ESP8266mDNS.h>#include <ArduinoOTA.h> //https://github.com/jandrassy/ArduinoOTAESP8266WiFiMulti wifiMulti;//-------------------------------BME280----------------------------------------BME280_I2C bme(0x76); // I2C using address 0x76//------------------------------ SHT10 ---------------------------------------// Specify data and clock connections and instantiate SHT1x object#define dataPin D4#define clockPin D3SHT1x sht1x(dataPin, clockPin);//------------------------------Rain------------------------------------------------int RainSensorPin = D6; //Rain REED-ILS sensor GPIO 12#define Bucket_Size_US 0.019 // rain bucket size inches #define Bucket_Size_EU 0.5 // rain bucket size milimetres ( 0.5mm)int last_localhour;volatile unsigned long tipCount1h; // bucket tip counter used in interrupt routinevolatile unsigned long tipCount24h; // bucket tip counter used in interrupt routine unsigned int counter = 16;volatile unsigned long contactTime;//--------------------------------Wind speed----------------------------------------int WindSensorPin = D5; // Wind speed -ILS sensor (anemometer) GPIO 14volatile unsigned long Rotations; // cup rotation counter used in interrupt routinevolatile unsigned long ContactBounceTime; // Timer to avoid contact bounce in interrupt routine//-------------------------------Wind direction-----------------------------------------------//int WindVanePin = A0; // The pin the wind vane sensor is connected to A0 (wind direction)float wind_avg; // average wind directionint vane_value;// raw analog value from wind vaneint Direction;// translated 0 - 360 directionint CalDirection;// converted value with offset applied#define Offset 0;int windDirections[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };//--------------------------------Setup Wifi----------------------------------------------const char* ssid1 = "xxxxxxxxx"; //I use multiple SSID In my home, but you can only define one.const char* password1 = "xxxxxxx";const char* ssid2 = "xxxxxxxxxx";const char* password2 = "xxxxxxxxx";const char* ssid3 = "xxxxxxxxxx";const char* password3 = "xxxxxxxxx";const int sleepTimeS = 300; //18000 for Half hour, 300 for 5 minutes etc.//--------------------------------Time settings ------------------------------------------int UTC_OFFSET = 3 ; // (GMT +3 ) volatile unsigned long OFFSET_S; // offset in seconds//--------------------------------PWS settings ------------------------------------------float altitudepws = 28.00; //Local altitude of the PWS to get relative pressure meters (m)//----------------------------Wunderground.com ID PSW ----------------------------------char server [] = "rtupdate.wunderground.com";char WEBPAGE [] = "GET /weatherstation/updateweatherstation.php?";char ID [] = "IKERTS15";char Key [] = "ewbiuy8g";//----------------------------Weathercloud.net ID Key ----------------------------------char server2 [] = "http://api.weathercloud.net";char ID2 [] = "b5839e2508564738";char Key2 [] = "e481b3d042b910e92ghgfrt200";//----------------------------Thingspeak.com API Key ----------------------------------const char* server3 = "api.thingspeak.com";String apiKey ="KRBFTRETYNOTAI";//-----------------------------------NTP VAR---------------------------------------------unsigned int localPort = 2390;IPAddress timeServerIP;// const char* ntpServerName = "time.nist.gov";//const char* ntpServerName = "time.google.com";const char* ntpServerName = "pool.ntp.org";const int NTP_PACKET_SIZE = 48;byte packetBuffer[ NTP_PACKET_SIZE];WiFiUDP udp;unsigned long epoch;//--------------------------------WEATHER VAR---------------------------------------------float tempc; // Temp celsius DS18B20float tempc_min= 100; // Minimum temperature Cfloat temp2c; // Temp celsius BMP280float humidity; // Humidity BMP280float temp_f; // Temp farenheit BMP280float dewpt_f; // dew point (F)float dewpt_c; // dew point (C)float heat_f; // heat index (F)float heat_c; // heat index (C)float windSpeed = 0; // Wind speed (mph)float wind_speed_min = 100; // Minimum wind speed (mph)float wind_speed_avg; // 10 minutes average wind speed ( mph)float windgustmph = 0; // Wind gust speed( mph)float windmax = 0;float barompa; // Preasure pascal Pafloat last_baromhpa; // previous preasure valuefloat baromin; // Preasure inches of mercury InHgfloat baromhpa; // Preasure hectopascal hPafloat rain1h = 0; // Rain inches over the past hourfloat rain = 0; // Rain milimetres over the past hourfloat rain24h = 0; // Rain inches over the past 24 hoursfloat rainrate = 0; // Rain milimetres over the past 24 hoursfloat chill_f; // Windchill (F)float chill_c; // Windchill (C)int dBm; // WiFi signal strenght dBmint quality; // WiFi signal quality %//-------------------------------- Heat Index ---------------------------------------------#define c1 (-42.379)#define c2 (2.04901523)#define c3 (10.14333127)#define c4 (-0.22475541)#define c5 (-0.00683783)#define c6 (-0.05481717)#define c7 (0.00122874)#define c8 (0.00085282)#define c9 (-0.00000199)bool debug = 1; //debug = 1 -> enable debug//-------------------------------------------------------------------------------------------------------------////////////////////////////////////MAIN PROGRAM START///////////////////////////////////////////////////////////-------------------------------------------------------------------------------------------------------------void setup(){ Rotations = 0; // Set Rotations to 0 ready for calculations tipCount1h = 0; tipCount24h = 0; wind_speed_min=100; Serial.begin(115200); delay(7000); WiFi.hostname("Weather_station_Davis"); Serial.print("Start NodeMCU Weather Station "); Serial.println(ID); Serial.println(); OFFSET_S = UTC_OFFSET * -3600; //Offset in seconds //DS18B20.begin(); //delay(2000); //Wire.begin(D2,D1); if (!bme.begin()) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } bme.setTempCal(-1); startwifi(); ArduinoOTA.setHostname("NodeMCU_weather_station"); pinMode(RainSensorPin, INPUT); attachInterrupt(digitalPinToInterrupt(RainSensorPin), isr_rg, FALLING); pinMode(WindSensorPin, INPUT); attachInterrupt(digitalPinToInterrupt(WindSensorPin), isr_rotation, FALLING); // change if low to high >> RISING sei(); ArduinoOTA.onStart([]() { Serial.println("Start"); }); ArduinoOTA.onEnd([]() { Serial.println("\nEnd"); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { Serial.printf("Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { Serial.printf("Error[%u]: ", error); if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); else if (error == OTA_END_ERROR) Serial.println("End Failed"); }); ArduinoOTA.begin(); Serial.println("Ready"); }void loop(){ read_data(); // read different sensors data from analog and digital pins of ESP8266 getRain(); getWindSpeed(); isr_rotation(); getWindDirection(); RSSIdBm(); // WiFi signal quality (RSSI) print_data(); // print data in serial monitor wunderground(); // sends data to wunderground.com weathercloud(); // sends data to weathercloud.net thingspeak(); // sends data to thingspeak.com }//-------------------------------------------------------------------------------------------------------------////////////////////////////////////READ THE DATA FROM SENSORS///////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------- void read_data(void) { delay(50); tempc = sht1x.readTemperatureC(); humidity = sht1x.readHumidity(); if (tempc_min > tempc ) { tempc_min = tempc;} bme.readSensor(); delay(500); baromhpa = bme.getPressure_MB()+(altitudepws * 0.1); if (baromhpa < 950 || baromhpa > 1050 ) { baromhpa = last_baromhpa; } last_baromhpa = baromhpa; baromin = (baromhpa)/ 33.86; temp2c = bme.getTemperature_C(); temp_f = (tempc_min * 9.0)/ 5.0 + 32.0; dewpt_c = (dewPoint(tempc_min, humidity)); //dew point dewpt_f = (dewpt_c * 9.0)/ 5.0 + 32.0; // converting dew point to F windchill(); heatindex(); Counter(); }//-------------------------------------------------------------------------------------------------------------////////////////////////////////////Get wind speed ///////////////////////////////////////////////////////////-------------------------------------------------------------------------------------------------------------void getWindSpeed(void) { Rotations = 0; // Set Rotations count to 0 ready for calculations //sei(); // Enables interrupts ArduinoOTA.handle(); delay (5000); // Wait 5 seconds to average wind speed ArduinoOTA.handle(); delay (5000); // Wait 5 sedconds to average wind speed ArduinoOTA.handle(); delay (5000); // Wait 5 seconds to average wind speed ArduinoOTA.handle(); delay (5000); // Wait 5 seconds to average wind speed ArduinoOTA.handle(); delay (5000); // Wait 5 seconds to average wind speed ArduinoOTA.handle(); delay (5000); // Wait 5 seconds to average wind speed //cli(); // Disable interrupts /* convert to mp/h using the formula V=P(2.25/T) V = P(2.25/30) = P * 0.075 V - speed in mph, P - pulses per sample period, T - sample period in seconds */ windSpeed = Rotations * 0.15; // 30 seconds Rotations = 0; // Reset count for next sample if (windSpeed > windgustmph) { windgustmph = windSpeed;} if (wind_speed_min > windSpeed ) { wind_speed_min = windSpeed;} wind_speed_avg = (windgustmph + wind_speed_min) * 0.5; // average wind speed mph per 10 minutes }// This is the function that the interrupt calls to increment the rotation count//-------------------------------------------------------------------------------------------------------------////////////////////////////////////ISR rotation////////////////////////////////////////////////////////////////-------------------------------------------------------------------------------------------------------------void isr_rotation(void) { if ((millis() - ContactBounceTime) > 30 ) { // debounce the switch contact. Rotations++; ContactBounceTime = millis(); }}// Convert MPH to Knotsfloat getKnots(float speed) { return speed * 0.868976; //knots 0.868976;}// Convert MPH to m/sfloat getms(float speed) { return speed * 0.44704; //metric m/s 0.44704;;}// Get Wind Direction//-------------------------------------------------------------------------------------------------------------/////////////////////////////////// Wind direction //////////////////////////////////////////////////////////////-------------------------------------------------------------------------------------------------------------void getWindDirection(void) {vane_value = analogRead(A0);Direction = map(vane_value, 0, 1023, 0, 360);CalDirection = Direction + Offset;if(CalDirection > 360)CalDirection = CalDirection - 360;if(CalDirection < 0)CalDirection = CalDirection + 360; DirectionCheck();//getHeading(CalDirection);}void DirectionCheck(){ if(vane_value >= 0 && vane_value < 32) wind_avg = 0; else if(vane_value >= 32 && vane_value < 96) wind_avg = 22.5; else if(vane_value >= 96 && vane_value < 160) wind_avg = 45; else if(vane_value >= 160 && vane_value < 224) wind_avg = 67.5; else if(vane_value >= 224 && vane_value < 288) wind_avg = 90; else if(vane_value >= 288 && vane_value < 352) wind_avg = 112.5; else if(vane_value >= 352 && vane_value < 416) wind_avg = 135; else if(vane_value >= 416 && vane_value < 480) wind_avg = 157.5; else if(vane_value >= 480 && vane_value < 544) wind_avg = 180; else if(vane_value >= 544 && vane_value < 608) wind_avg = 202.5; else if(vane_value >= 608 && vane_value < 672) wind_avg = 225; else if(vane_value >= 672 && vane_value < 736) wind_avg = 247.5; else if(vane_value >= 736 && vane_value < 800) wind_avg = 270; else if(vane_value >= 800 && vane_value < 864) wind_avg = 292.5; else if(vane_value >= 864 && vane_value < 928) wind_avg = 315; else if(vane_value >= 928 && vane_value < 992) wind_avg = 337.5; else if(vane_value >= 992 && vane_value < 1025) wind_avg = 0; DirectionAvg();}void DirectionAvg() { int index = wind_avg / 22.5; if ((index < 0) or (index > 15)) {exit;} windDirections[index]++;}int getWindDirectionMax() { int max = windDirections[0]; int index = 0; for (int i = 1; i < 16; i++) { if (max < windDirections[i]) { max = windDirections[i]; // find max value index = i; } } return index * 22.5; // return average wind direction }// Converts compass direction to headingvoid getHeading(int direction) {if(direction < 22.5)Serial.print("N ");else if (direction < 67.5)Serial.print("NE ");else if (direction < 112.5)Serial.print("E ");else if (direction < 157.5)Serial.print("SE ");else if (direction < 202.5)Serial.print("S ");else if (direction < 247.5)Serial.print("SW ");else if (direction < 292.5)Serial.print("W ");else if (direction < 337.5)Serial.print("NW ");elseSerial.print("N ");} // converts wind speed to wind strengthvoid getWindStrength(float speed){ if(speed < 1) Serial.println("Calm"); else if(speed >= 1 && speed < 3) Serial.println("Light Air"); else if(speed >= 3 && speed < 7) Serial.println("Light Breeze"); else if(speed >= 7 && speed < 12) Serial.println("Gentle Breeze"); else if(speed >= 12 && speed < 18) Serial.println("Moderate Breeze"); else if(speed >= 18 && speed < 24) Serial.println("Fresh Breeze"); else if(speed >= 24 && speed < 31) Serial.println("Strong Breeze"); else if(speed >= 31 && speed < 38) Serial.println("High wind"); else if(speed >= 38 && speed < 46) Serial.println("Fresh Gale"); else if(speed >= 46 && speed < 54) Serial.println("Strong Gale"); else if(speed >= 54 && speed < 63) Serial.println("Storm"); else if(speed >= 63 && speed < 72) Serial.println("Violent storm"); else if(speed >= 72 && speed) Serial.println("Hurricane"); }//------------------------------------------------------------------------------------------------------------///////////////////////////////// Get Rain data ////////////////////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------ void getRain(void) { cli(); //Disable interrupts rainrate = tipCount1h * Bucket_Size_EU; rain1h = tipCount1h * Bucket_Size_US; // 0.3/25.4 = 0.012 bucket size inches rain = tipCount24h * Bucket_Size_EU; rain24h = tipCount24h * Bucket_Size_US; // 0.3/25.4 = 0.012 bucket size inches if (last_localhour != localhour()) { tipCount1h = 0; //reset Rain counter each 1h for (int i = 0; i < sizeof(windDirections) / sizeof(windDirections[0]); i++){ windDirections[i] = 0; //reset Wind direction average each 1h} last_localhour = localhour();} if ((localhour() >= 23) && (localmin() >= 58)) //reset Daily Rain each 24 { Serial.println("Reset Daily Rain"); tipCount24h = 0; ESP.restart(); } sei(); //Enables interrupts ntptime(); }//------------------------------------------------------------------------------------------------------------/////////////////////////////////////// RAIN Interrupt /////////////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------// Interrrupt handler routine that is triggered when the W174 detects rain void isr_rg() { if((millis() - contactTime) > 500 ) { // debounce of sensor signal tipCount1h++; tipCount24h++; contactTime = millis(); } } //------------------------------------------------------------------------------------------------------------////////////////////////////////////////////////// RSSI dBm ////////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------void RSSIdBm() { while (wifiMulti.run() != WL_CONNECTED) { delay(1000); Serial.print("."); } dBm = WiFi.RSSI(); quality = 2 * (dBm + 100); if (dBm >= -50) quality = 100; }//------------------------------------------------------------------------------------------------------------/////////////////////////////////PRINT DATA IN SERIAL MONITOR///////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------ void print_data(void) { if(debug) { Serial.println(" "); Serial.print("DS18B20 = "); Serial.print(tempc_min); Serial.println(" C "); Serial.print(F("BME280 = ")); Serial.print(temp2c); Serial.print(" C "); Serial.print(temp_f); Serial.print(" F "); Serial.print(humidity); Serial.print(" % "); Serial.print(baromhpa);Serial.print(" hPa "); Serial.print(baromin); Serial.println(" inHg "); //Serial.print(F("BME280 Approx altitude = ")); //Serial.print(bme.readAltitude(1015)); // this should be adjusted to your local forcase http://www.mide.com/pages/air-pressure-at-altitude-calculator //Serial.println(" m"); Serial.print("Wind_Strength = "); getWindStrength(windSpeed); Serial.print("Wind_Speed = "); Serial.print(windSpeed);Serial.print(" mph "); Serial.print(getKnots(windSpeed));Serial.print(" knots "); Serial.print(getms(windSpeed));Serial.println(" m/s "); Serial.print("Min = "); //Minimum wind speed Serial.print(wind_speed_min / 2.236 );Serial.print(" m/s "); Serial.print("Avg = "); //Average wind speed Serial.print(wind_speed_avg / 2.236);Serial.print(" m/s "); Serial.print("Gust = "); //Maximum wind gust speed Serial.print(windgustmph / 2.236);Serial.println(" m/s "); Serial.print("Wind_Direction = "); getHeading(CalDirection); Serial.println(CalDirection); Serial.print("Wind Avg = "); Serial.println(getWindDirectionMax()); Serial.print("Vane Value = "); Serial.println(vane_value); Serial.print("Rain_Tip_Count = "); Serial.println(tipCount24h); Serial.print("Precip_Rate = "); Serial.print(rain1h); Serial.print(" in "); Serial.print(" Precip_Accum_Total: "); Serial.print(rain24h); Serial.println(" in "); Serial.print("Rain = ");Serial.print(rain); Serial.print(" mm "); Serial.print("Rain rate = "); Serial.print(rainrate); Serial.println(" mm"); Serial.print("Dew point = "); Serial.print(dewpt_c);Serial.print(" C "); Serial.print(dewpt_f);Serial.println(" F "); Serial.print("Heat index = "); Serial.print(heat_c);Serial.println(" C "); Serial.print("Wind chill = "); Serial.print(chill_c);Serial.println(" C "); Serial.println(" "); Serial.print("Signal quality = ");Serial.println(quality); Serial.print("RSSI = ");Serial.print(dBm);Serial.println("dBm "); Serial.println(" "); Serial.print("Counter = ");Serial.println(counter); Serial.println(" "); } }//------------------------------------------------------------------------------------------------------------///////////////////////////////// SEND DATA TO Wunderground.com ////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------void wunderground(void){ Serial.print("Connecting to "); Serial.println(server); WiFiClient client; if (client.connect(server, 80)) { Serial.print("connected to "); Serial.println(client.remoteIP()); delay(100); } else { Serial.println("connection failed"); } client.print(WEBPAGE); client.print("ID="); client.print(ID); client.print("&PASSWORD="); client.print(Key); client.print("&dateutc=now&winddir="); client.print(CalDirection); client.print("&tempf="); client.print(temp_f); client.print("&windspeedmph="); client.print(wind_speed_avg); client.print("&windgustmph="); client.print(windgustmph); client.print("&dewptf="); client.print(dewpt_f); client.print("&humidity="); client.print(humidity); client.print("&baromin="); client.print(baromin); client.print("&rainin="); client.print(rain1h); client.print("&dailyrainin="); client.print(rain24h); client.print("&softwaretype=NodeMCU-ESP12&action=updateraw&realtime=1&rtfreq=30"); client.print("/ HTTP/1.1\r\nHost: host:port\r\nConnection: close\r\n\r\n"); Serial.println(" "); delay(1000); //sleepMode();}//------------------------------------------------------------------------------------------------------------///////////////////////////////// SEND DATA TO Weathercloud.net //////////////////////////////////////////////------------------------------------------------------------------------------------------------------------void weathercloud(void){if (counter == 17){{ Serial.print("connecting to "); Serial.print(server2); Serial.println("..."); WiFiClient client; if (client.connect(server2, 80)) { Serial.print("connected to "); Serial.println(client.remoteIP()); } else { Serial.println("connection failed"); } client.print("GET /set/wid/"); client.print(ID2); client.print("/key/"); client.print(Key2); client.print("/temp/"); client.print(tempc_min*10); client.print("/chill/"); client.print(chill_c*10); client.print("/dew/"); client.print(dewpt_c*10); client.print("/heat/"); client.print(heat_c*10); client.print("/hum/"); client.print(humidity); client.print("/wspd/"); client.print(windSpeed*4.47); client.print("/wspdavg/"); client.print(wind_speed_avg*4.47); client.print("/wspdhi/"); client.print(windgustmph*4.47); client.print("/wdir/"); client.print(CalDirection); client.print("/wdiravg/"); client.print(getWindDirectionMax()); client.print("/bar/"); client.print(baromhpa*10); client.print("/rain/"); client.print(rain*10); client.print("/rainrate/"); client.print(rainrate*10); client.print("/tempin/"); client.print(tempc_min*10); client.print("/dewin/"); client.print(dewpt_c*10); client.print("/heatin/"); client.print(heat_c*10); client.print("/humin/"); client.print(humidity); //client.print("/uvi/"); //client.print(uvi); client.println("/ HTTP/1.1"); client.println("Host: api.weathercloud.net"); client.println(); delay(1000); if (!client.connected()) { Serial.println("client disconected."); if (client.connect(server2, 80)) { delay(100); Serial.print("connected to "); Serial.println(client.remoteIP()); } else { Serial.println("connection failed"); } }}} delay(100);}//------------------------------------------------------------------------------------------------------------///////////////////////////////// SEND DATA TO Thingspeak.com //////////////////////////////////////////////------------------------------------------------------------------------------------------------------------void thingspeak(void){if (counter == 17){{ Serial.print("connecting to "); Serial.print(server2); Serial.println("..."); WiFiClient client; if (client.connect(server3, 80)) { // use ip 184.106.153.149 or api.thingspeak.com Serial.print("connected to "); Serial.println(client.remoteIP()); String postStr = apiKey; postStr += "&field1="; postStr += String(tempc_min); postStr += "&field2="; postStr += String(humidity); postStr += "&field3="; postStr += String(baromhpa); postStr += "&field4="; postStr += String(wind_speed_avg * 0.447); postStr += "&field5="; postStr += String(windgustmph * 0.447); postStr += "&field6="; postStr += String(rain); postStr += "&field7="; postStr += String(getWindDirectionMax()); postStr += "&field8="; postStr += String(quality); postStr += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(postStr.length()); client.print("\n\n"); client.print(postStr); delay(1000); } client.stop();}}}//------------------------------------------------------------------------------------------------------------/////////////////////////////////////////////// Counter ///////////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------void Counter(){if (counter == 18){windgustmph = 0;wind_speed_avg = 0;wind_speed_min = 100;tempc_min = 100;counter = 0; //10 minutes loop 30*20=600s = 10min}counter++;}//------------------------------------------------------------------------------------------------------------/////////////////////////////////////////////// Calculate Heat Index /////////////////////////////////////////------------------------------------------------------------------------------------------------------------void heatindex(){if (temp_f > 80.0) //The heat index only works for temperatures above 80°F { heat_f = c1+c2*(temp_f)+c3*(humidity)+c4*(temp_f)*(humidity)+c5*(pow(temp_f,2))+c6*(pow(humidity,2))+c7*(pow(temp_f, 2))*(humidity)+c8*(temp_f)*(pow(humidity, 2))+c9*(pow(temp_f, 2))*(pow(humidity, 2)); heat_c = (heat_f - 32)*5/9; // converting to C } else{ heat_c = tempc_min;}}//------------------------------------------------------------------------------------------------------------/////////////////////////////////////////////// Calculate Windchill //////////////////////////////////////////------------------------------------------------------------------------------------------------------------void windchill(){if ((temp_f <50.0) && (windgustmph > 3.0)) //The wind chill only works for temperatures below 50°F and wind speed above 3 mph. (10°C , 1 m/s){ chill_f =35.74+0.6215*temp_f-35.75*pow(wind_speed_avg,0.16)+0.4275*temp_f*pow(wind_speed_avg,0.16); chill_c = (chill_f - 32)*5/9; // converting to C}else{ chill_c = tempc_min;}}//------------------------------------------------------------------------------------------------------------/////////////////////////////////////////////// Calculate dew Point C //////////////////////////////////////////------------------------------------------------------------------------------------------------------------double dewPoint(double tempc_min, double humidity){ double RATIO = 373.15 / (273.15 + tempc_min); // RATIO was originally named A0, possibly confusing in Arduino context double SUM = -7.90298 * (RATIO - 1); SUM += 5.02808 * log10(RATIO); SUM += -1.3816e-7 * (pow(10, (11.344 * (1 - 1/RATIO ))) - 1) ; SUM += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO - 1))) - 1) ; SUM += log10(1013.246); double VP = pow(10, SUM - 3) * humidity; double T = log(VP/0.61078); // temp var return (241.88 * T) / (17.558 - T);}//------------------------------------------------------------------------------------------------------------/////////////////////////////////////////////// ESP8266 sleep mode /////////////////////////////////////////////------------------------------------------------------------------------------------------------------------void sleepMode() { Serial.print(F("Sleeping...")); ESP.deepSleep(sleepTimeS * 1000000);}//------------------------------------------------------------------------------------------------------------////////////////////////////////////////////////// WIFI SETUP //////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------void startwifi(){ Serial.print("Connecting to Wifi "); delay(1000); wifiMulti.addAP(ssid1, password1); //if you have less SSID, delete the others wifiMulti.addAP(ssid2, password2); wifiMulti.addAP(ssid3, password3); while (wifiMulti.run() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); delay(500); startudp();}//------------------------------------------------------------------------------------------------------------////////////////////////////////////////////////// UDP NTP//////////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------void startudp(){ Serial.println("Starting UDP"); udp.begin(localPort); Serial.print("Local port: "); Serial.println(udp.localPort());}//------------------------------------------------------------------------------------------------------------////////////////////////////////////////////////// NTP request /////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------unsigned long sendNTPpacket(IPAddress& address){ Serial.println("sending NTP packet..."); // set all bytes in the buffer to 0 memset(packetBuffer, 0, NTP_PACKET_SIZE); // Initialize values needed to form NTP request // (see URL above for details on the packets) packetBuffer[0] = 0b11100011; // LI, Version, Mode packetBuffer[1] = 0; // Stratum, or type of clock packetBuffer[2] = 6; // Polling Interval packetBuffer[3] = 0xEC; // Peer Clock Precision // 8 bytes of zero for Root Delay & Root Dispersion packetBuffer[12] = 49; packetBuffer[13] = 0x4E; packetBuffer[14] = 49; packetBuffer[15] = 52; // all NTP fields have been given values, now // you can send a packet requesting a timestamp: udp.beginPacket(address, 123); //NTP requests are to port 123 udp.write(packetBuffer, NTP_PACKET_SIZE); udp.endPacket();}//------------------------------------------------------------------------------------------------------------////////////////////////////////////////////////// NTP Time ////////////////////////////////////////////////////------------------------------------------------------------------------------------------------------------unsigned long ntptime(){ WiFi.hostByName(ntpServerName, timeServerIP); sendNTPpacket(timeServerIP); delay(1000); int cb = udp.parsePacket(); if (!cb) { Serial.println("no NTP packet yet"); } else { Serial.print("NTP packet received, length="); Serial.println(cb); // We've received a packet, read the data from it udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the buffer //the timestamp starts at byte 40 of the received packet and is four bytes, // or two words, long. First, esxtract the two words: unsigned long highWord = word(packetBuffer[40], packetBuffer[41]); unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]); // combine the four bytes (two words) into a long integer // this is NTP time (seconds since Jan 1 1900): unsigned long secsSince1900 = highWord << 16 | lowWord; // now convert NTP time into everyday time: // Unix time starts on Jan 1 1970. In seconds, that's 2208988800: const unsigned long seventyYears = 2208988800UL; // subtract seventy years: epoch = secsSince1900 - seventyYears; if (debug) { Serial.print("Seconds since Jan 1 1900 = " ); Serial.println(secsSince1900); // print Unix time: Serial.print("Unix time = "); Serial.println(epoch); // print the hour, minute and second: Serial.print("The local time UTC "); Serial.println(UTC_OFFSET); // Offset In seconds https://www.epochconverter.com/timezones?q= Serial.print(((epoch-( OFFSET_S )) % 86400L) / 3600); // print the hour (86400 equals secs per day) Serial.print(':'); if ( (((epoch-(OFFSET_S * 7)) % 3600) / 60) < 10 ) { // In the first 10 minutes of each hour, we'll want a leading '0' Serial.print('0'); } Serial.print(((epoch-(OFFSET_S )) % 3600) / 60); // print the minute (3600 equals secs per hour) Serial.print(':'); if ( ((epoch-(OFFSET_S )) % 60) < 10 ) { // In the first 10 seconds of each minute, we'll want a leading '0' Serial.print('0'); } Serial.println((epoch-(OFFSET_S )) % 60); // print the second } }}int localhour(){ return (((epoch-(OFFSET_S )) % 86400L) / 3600);}int localmin() { return (((epoch-(OFFSET_S )) % 3600) / 60);}int localsec(){ return ((epoch-(OFFSET_S )) % 60);}

    Hi Chirust, I don't have SHT10 sensor, so I can't to test it. SHT10 sensor have 4 pins. Vdd, Gnd, Data and SCK. #define dataPin D4 #define clockPin D3 So try connect like this >>> http://www.esp8266learning.com/wemos-sht11-example... Later I will upload modified code.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Arduino > Tools > Serial monitor (115200 baud )

    View Instructable »
  • Arduino WiFi Wireless Weather Station  Wunderground

    // I change send data to Wunderground every 10 minutes. //-------------------------------------------------------------------// Following function sends sensor data to wunderground.com//-------------------------------------------------------------------void wunderground(void){if (counter == 20){ String cmd1 = "AT+CIPSTART=\"TCP\",\""; cmd1 += "rtupdate.wunderground.com"; // wunderground cmd1 += "\",80"; esp8266Module.println(cmd1); if(esp8266Module.find("Error")){ Serial.println("AT+CIPSTART error"); return; } String cmd = "GET /weatherstation/updateweatherstation.php?ID="; cmd += ID; cmd += "&PASSWORD="; cmd += PASSWORD; cmd += "&dateutc=now&winddir="; cmd += …

    see more »

    // I change send data to Wunderground every 10 minutes. //-------------------------------------------------------------------// Following function sends sensor data to wunderground.com//-------------------------------------------------------------------void wunderground(void){if (counter == 20){ String cmd1 = "AT+CIPSTART=\"TCP\",\""; cmd1 += "rtupdate.wunderground.com"; // wunderground cmd1 += "\",80"; esp8266Module.println(cmd1); if(esp8266Module.find("Error")){ Serial.println("AT+CIPSTART error"); return; } String cmd = "GET /weatherstation/updateweatherstation.php?ID="; cmd += ID; cmd += "&PASSWORD="; cmd += PASSWORD; cmd += "&dateutc=now&winddir="; cmd += CalDirection; cmd += "&windspeedmph="; cmd += wind_avg; cmd += "&windgustmph="; cmd += windgustmph; cmd += "&tempf="; cmd += tempf; cmd += "&dewptf="; cmd += dewptf; cmd += "&humidity="; cmd += humidity; cmd += "&baromin="; cmd += baromin; cmd += "&solarradiation="; cmd += solar; cmd += "&UV="; cmd += UVmax; cmd += "&rainin="; cmd += rain1h; cmd += "&dailyrainin="; cmd += rain24h; cmd += "&softwaretype=Arduino-ESP8266&action=updateraw&realtime=1&rtfreq=30"; // &softwaretype=Arduino%20UNO%20version1 cmd += "/ HTTP/1.1\r\nHost: host:port\r\nConnection: close\r\n\r\n"; cmd1 = "AT+CIPSEND="; cmd1 += String(cmd.length()); esp8266Module.println(cmd1); if(esp8266Module.find(">")){ esp8266Module.print(cmd); digitalWrite(GREEN_LED,HIGH); // Green led is turn on then sending data to Wunderground Serial.println("Data send OK"); delay(1000); digitalWrite(GREEN_LED,LOW); } else{ esp8266Module.println("AT+CIPCLOSE"); Serial.println("Connection closed"); Serial.println(" "); } delay(2500);} Counter();}

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi Kevin, I just now create another mathwork account. So I dindt know why you have problem.

    View Instructable »
  • RimvydasP commented on pat_pending's instructable Fat Wheel Mini Bike
    Fat Wheel Mini Bike

    Very similar like Tula TMZ 5.951 motorcycle https://www.youtube.com/watch?v=QTjaqRq_q6M

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hello, I don't know what you mean. rst - reset ? ESP.restart(); ?

    View Instructable »
  • Arduino Foosball Scoreboard  ( Sensor  IR Led )

    Hi, It is simple voltage divider.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Board manager ESP8266 - 2.5.0

    Hi Nico, thanks for indormation.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    https://apicommunity.wunderground.com/weatherapi/topics/end-of-service-for-the-weather-underground-api

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Hi Giuseppe,Wunderground change api. So old api code didn't work with new api.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Yes I was create 2 weather station with oled and with tft 2.8 display. But Wunderground api end of service. https://apicommunity.wunderground.com/weatherapi/t... So now I get weather data from DarkSky and OpenWeatherMap. Now it is easier to send data to Thingspeak. And from Thingspeak get weather data and display to Oled or tft screen. But I didnt have time at this moment.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    1. Mine weather station working 2 years, but I didn't get abnormal pressure readings. But I create another weather station for mine friend and he have problem with abnormal pressure, and humidity. So I think BME280 sensor is bad.2. BME280 sensor buy from Ebay ( China seller) 3. I just add compatibility to send sensors data to Thingspeak.com. Fix average wind direction for Weathercloud. And just add WiFi signal strength ( RSSI)

    View Instructable »
  • Build Your Own Foosball Table

    I print players with ABS plastic. But they always broke. So after one year I bought new from eBay https://www.ebay.com/itm/26-Foosball-table-Men-Player-Soccer-Table-FOOTBALL-NEW-Black-White/281082481466?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649

    View Instructable »
  • ESP32 Weathercloud Weather Station

    If your main board is ESP32, why you need Arduino? Arduino only for rain counter? If EP32 can connect to ntp time server, why you need DS3231 RTC ?

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Grazie Giuseppe

    I didn't change wind direction settings.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Can you explain about pressure correction. How to correct?

    I just edit and upload your code. I didn't edit your wind direction. Upload your last code to check wind direction it is working or check vane-value again.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    Ciao Giuseppe,I change delay from 50ms to 2000s to read DS18B20 sensor. And now temperature will be not minimum value , but higher value. So if delay did not solve this problem, so negative temperature value will be eliminated. So always show maximum temperature value.

    View Instructable »
  • IoT Personal NodeMCU ESP12 WiFi Wireless Weather Station

    1. What temperature sensor are you using? DS18B20 or BME280. I know your problem. Send me your code and I will fix.2. 1.492mph / 30 seconds = 0.05 285 line windSpeed = Rotations * 0.05; 3. bool debug = 1; 153 line change it to ,,1''

    View Instructable »
      • Wind Station for Windsurfing Based ON MQTT& AWS
      • ESPWatch With Weather Forecasting
      • An Infrared Tracking Dog
  • Next time if you need help for soldering small smd parts write to me. I will try to help you.

    View Instructable »
  • 1) Yes it is correct. 2) You don't need to modify this. This function for average analog value.

    View Instructable »
  • // Upload this code to know vane-valueint analogPin = A0;int vane_value = 0; void setup() { Serial.begin(115200); // setup serial}void loop() { vane_value = analogRead(analogPin); // read the input pin Serial.println(vane_value); // debug value delay (3000);}

    // Upload this code to know vane-valueint analogPin = A0;int vane_value = 0; void setup() { Serial.begin(115200); // setup serial}void loop() { vane_value = analogRead(analogPin); // read the input pin Serial.println(vane_value); // debug value delay (3000);}

    View Instructable »
  • It need less energy, rain reset more accurate.

    View Instructable »
  • I mean change this value. Try lower to 0.12, 0.10, 0.7, 0.5

    View Instructable »
  • RimvydasP followed Bodmer
      • Arduino - TFT Display of Icons and Images From FLASH Memory
      • Arduino - TFT Display of Bitmap Images From an SD Card
      • Arduino Analogue 'ring' Meter on Colour TFT Display
  • Reduce this value (red rectangle)

    View Instructable »
  • I didn't understand why you need to change it

    View Instructable »
  • In ESP12-F example GPIO15 pin (D8) by 1K ohm resistor connected to ground. Maybe it is not necessary but I connected it.

    Hi Giuseppe,I add photos, so correct code. Wind direction vane value you had adjust by yourself. These value it is for example.

    View Instructable »
  • Hi Giuseppe,1) 10C it is the RealFeel Temperature is an index that describes what the temperature really feels like. It is a unique composite of the effects of temperature, wind, humidity, sunshine intensity, cloudiness, precipitation and elevation on the human body--everything that affects how warm or cold a person feels.2) BME280 temperature was fix. Try now. I just accidentally remove request command from BME280 sensor. 3) Sending data to Wunderground.com I'm using 30 seconds loop. 10 minutes loop sending data to Wundercloud.net

    View Instructable »
  • Hello,Davis anenometer and Ventus rain gauge it is for example. You can use another models. I'm also beginner in programing. So I will try to help you.

    View Instructable »
  • Hello Manfred,So ESP8266 WiFi module connect to ntp time server and get time. For example if time reach 23:55 wifi module reset rain. I get information, from this web site "ChyneHome" chynehome.com/web/wp-content/uploads/2015/10/Personal_Weather_Sation_ESP8266_V2.ziphttp://chynehome.com/web/

    View Instructable »
    • NodeMCU  Wireless Weather Station
      284 views
      1 favorites
      0 comments
  • upload this code and check your button analog value https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/and adjust this value >> int Button[8][3] = {{1, 905, 919}, // button 1 0R -- Black UP

    View Instructable »
  • Hello, check your Arduino libraries folder. Maybe do you have another IR remote library which conflict with ,,Arduino-IRremote-master" library

    View Instructable »
  • There are two ways to program ESP8266 . Usb dongle connect to ESP8266 and send AT commands via serial monitor or Arduino Uno connect to ESP8266. and send AT commands via serial monitor. Usb dongle is compatible.

    View Instructable »
  • Dip switch used for enable or disable ESP-12 wifi modulle. If you want to use ESP-01, turn off dip switch.

    If you didn't have usb serial ttl adapter, you can use Arduino as programmer. You have to use this code. #include <SoftwareSerial.h> SoftwareSerial esp8266(10,11); // make RX Arduino line is pin 10, make TX Arduino line is pin 11. // This means that you need to connect the TX line from the esp to the Arduino's pin 10 // and the RX line from the esp to the Arduino's pin 11void setup(){ Serial.begin(115200); esp8266.begin(115200); // your esp's baud rate might be different} void loop(){ if(esp8266.available()) // check if the esp is sending a message { while(esp8266.available()) { // The esp has data so display its output to the serial window char c = esp8266.read(); // read the next character. Serial.write(c); } } if(Serial.available()) { // the following delay …

    see more »

    If you didn't have usb serial ttl adapter, you can use Arduino as programmer. You have to use this code. #include <SoftwareSerial.h> SoftwareSerial esp8266(10,11); // make RX Arduino line is pin 10, make TX Arduino line is pin 11. // This means that you need to connect the TX line from the esp to the Arduino's pin 10 // and the RX line from the esp to the Arduino's pin 11void setup(){ Serial.begin(115200); esp8266.begin(115200); // your esp's baud rate might be different} void loop(){ if(esp8266.available()) // check if the esp is sending a message { while(esp8266.available()) { // The esp has data so display its output to the serial window char c = esp8266.read(); // read the next character. Serial.write(c); } } if(Serial.available()) { // the following delay is required because otherwise the arduino will read the first letter of the command but not the rest // In other words without the delay if you use AT+RST, for example, the Arduino will read the letter A send it, then read the rest and send it // but we want to send everything at the same time. delay(1000); String command=""; while(Serial.available()) // read the command character by character { // read one character command+=(char)Serial.read(); } esp8266.println(command); // send the read character to the esp8266 }}

    View Instructable »
  • Yes you can use Wemos. At this moment I am creating another weather station based on ESP8266 as main board. So wait if you can.

    View Instructable »
  • Hi, you only need one WiFi module. You can use ESP8266 ESP01 or ESP12.

    View Instructable »
  • Hi, #define DEBUG 0#define DEBUG 1 // I was using only if I want to check sensors data on serial monitor. Do you change weather station ID and password ? char ID [] = "XXXXXX"; //wunderground weather station ID String PASSWORD = "xxxxxx"; // wunderground weather station password

    View Instructable »
  • Hello Gregory, Do you have connected your ESP8266 to your router? Code it used a lot of memory. Try disable ,, serial monitor" Debug 0.

    View Instructable »
  • Radio signal strength is good? If radio signal strength is not good RDS will not display.

    View Instructable »
  • #define DEBUG 0 //change to DEBUG1 it will show in serial monitor more information. Press ,,R" and you will get more RDS information from radio station. check void displayRDS (void) PS, PTY, EON, TP, TA

    View Instructable »
  • Hello, so you need solar charge controller, battery 12V or 6V , and solar panel. For example if you have LiPo 2200mAh battery with a load that draws 100mA. 2.2/ 0.1 = it takes 22 hours. So if you have one cloudy day your weather station discharge your battery. You will need add another battery or battery with larger capacity.

    View Instructable »
  • Sveikas Dainiux22Šiuo metu neturiu laiko į visą tai gilintis, bet galiu duoti nuorodą kaip pavyzdį nuo ko pradėti.. Pagrindinė plokštė ESP8266 tai ir programa skiriasi. https://webcache.googleusercontent.com/search?q=ca...

    View Instructable »
  • Tools > Board:Arduino Uno ? I think you select ESP8266

    View Instructable »
      • Wifi Webradio With ESP8266 and VS1053 (KaraDio)
  • ARDUINO SOLAR CHARGE CONTROLLER ( Version 2.0)

    Arduino Uno solar charge shield

    View Instructable »
  • I was used clear plastic with silicone to encapsulate UV sensor. I can't compare UV sensor value with another UV sensor. So I can't confirm that UV sensors show data is correct.

    View Instructable »
  • link >> https://www.instructables.com/files/orig/FDD/10ZE/JDYUOHIX/FDD10ZEJDYUOHIX.rar

    View Instructable »
  • I was have problem with server "weatherstation.wunderground.com". So now I was using rtupdate.wunderground.com. So just ignore it ("weatherstation.wunderground.com"). ''Debug 1" I am using only to check sensors. So if you want sent data to WU disable Debug 0. Main program using a lot of memory. Disable it and it will use less memory and main program will be more stable.

    View Instructable »
  • RimvydasP's instructable Foosball Scoreboard's weekly stats:
    • Foosball Scoreboard
      260 views
      11 favorites
      0 comments