Stasiun Atmosfer Sederhan a-SDS011 NODEMCU DHT22 Mengirim Data ke Thingspeak. Deskripsi Proyek (Polandia): http: /// 2017/05/nodemcu-sds011-jako-badacz-jakoscietrza/kode bebas untuk digunakan dalam proyek Anda sendiri, tetapi tidak mendukungnya dan tidak beroperasi tidak bertanggung jawab :) –gitub

Netmaniac / dht_sensor. h

Simpan NetManiac/97C2530998172F71B728ADA2FA01D7B di komputer Anda dan menggunakannya di Github Desktop.

Temperamen Sederhan a-Send Data ke ha l-hal yang terjadi dari SDS011 + NODEMCU + DHT22. Penjelasan Proyek (Polandia): http://starter-kit. nettigo. pl/2017/05/nodemcu-s011-jako-badacz-jakosci-powietrza/ kode gratis untuk digunakan dalam proyek Anda sendiri, tetapi dukungan gratis saya menang, saya menang gratis, saya menang gratis, saya menang gratis, saya menang gratis, saya menang gratis, saya menang gratis, saya menang gratis, tetapi Dukungan GRATIS I Won ‘T LAKUKAN, dan saya tidak bertanggung jawab jika tidak berhasil πŸ™‚

File ini berisi dua buku teks Unicode, dan mungkin memiliki interpretasi atau kompilasi yang berbeda dari apa yang ditampilkan di bawah ini. Untuk mengonfirmasi, buka file dengan editor yang menampilkan karakter tersembunyi Unicode. Detail dua karakter unicode

// Berbagai contoh uji kelembaban/ sensor suhu DHT untuk pengujian
// Pekerjaan Ladyada, Domain Publik
#include “dht. h”
#define dhtpin d7 // pin digital mana yang akan terhubung?
// Harap lampah jenis yang Anda gunakan!
//#Tentukan DHTType DHT11 // DHT 11
#define DHTType DHT22 // DHT 22 (AM2302), AM2321
//#Tentukan DHTTYPE DHT21 // DHT 21 (AM2301)
// Sambungkan pin 1 (sisi kiri) dari sensor ke +5V.
// Catatan: Saat menggunakan papan logika 3. 3V seperti Arduino, hubungkan pin 1 hingga 3. 3V.
Hubungkan // ke 3. 3V, bukan 5V!
// Sambungkan pin k e-2 dari sensor ke dhtpin.
// Sambungkan pin k e-4 (sisi kanan) dari sensor ke ground.
// Sambungkan resistor 10k dari pin 2 (data) sensor ke pin 1 (catu daya).
// Inisialisasi sensor DHT.
// Di versi lama perpustakaan ini, parameter ketiga dari opsi diperlukan.
// Parameter ini tidak lagi diperlukan. Parameter ini tidak lagi diperlukan.
// Algoritma membaca DHT saat ini disesuaikan sehingga bekerja dengan prosesor kecepatan yang lebih tinggi.
Dht dht (dhtpin, dhttype);
Struct dht_data
Temp float;
Hum mengapung;
& gt;
Float dht_temp;
Void setup_dht ()
Serial.
Dht.
>
Void read_dht ()
Tunda (1000);
// Dibutuhkan sekitar 250mm detik untuk membaca suhu dan kelembaban!
// Nilai yang dibaca dari sensor mungkin hingga 2 detik lama ‘.
Dht_readings . hum = dht . readhumidity ();
// Baca suhu sebagai asupan (default)
Dht_readings . temp = dht . readtemperature ();
// Periksa apakah bacaan gagal dan berakhir lebih awal (coba lagi).
If (isnan (isnan (dht_readings. Hum) || isnan (dht_readings. Temp))
Serial . println (“Gagal membaca dari sensor DHT!”););
DHT_READING.
DHT_READING.
Kembali;
>
>

File ini berisi dua buku teks Unicode, dan mungkin memiliki interpretasi atau kompilasi yang berbeda dari apa yang ditampilkan di bawah ini. Untuk mengonfirmasi, buka file dengan editor yang menampilkan karakter tersembunyi Unicode. Detail dua karakter unicode

Mychannelnumber yang tidak ditandatangani = 276259;
Cons char *mywriteapey = “xxxxxxx”;
Char ssid [] = “test”; // jaringan ssid (nama)
Char pass [] = “*********”;
# Tentukan ts_delay 60 * 1000
# Termasuk
# Termasuk
# Termasuk
# Sertakan “dht_sensor. h”
# Termasuk
Bool is_sds_running = true;
# Tentukan SDS_PIN_RX D1
# Tentukan sds_pin_tx d2
Softwareserial serialsds (sds_pin_rx, sds_pin_tx, false, 1024);
Lastwrite panjang tidak ditandatangani = 0;
String ESP_CHIPID;
Nama server string
Float sds_display_values_10 [5];
Float sds_display_values_25 [5];
Unsigned int sds_display_value_pos = 0;
Bool send_now = false;
Bool will_check_for_update = false;
String last_result_sds = “”;
String last_value_sds_p1 = “”;
String last_value_sds_p2 = “”;
/* ****************************************************************
Konversi /* mengapung menjadi string.
/* Akurasi 2 digit di bawah ini
/**************************************************************** */
String float2string (nilai const float)
// Konversi float menjadi dua strin g-digit di bawah desimal.
Char temp [15];
String karakter s;
dtoStrf (nilai, 13, 2, temp);
s = string (temp);
S. trim ();
Kembali S;
>
/* ****************************************************************
/* Output debug
/**************************************************************** */
Void debug_out (const string & amp; teks, int linebreak = 1)
If (linebreak)
Serial.
>
kalau tidak
Serial.
>
>
/* ****************************************************************
/* Mulai sensor SDS011.
/**************************************************************** */
Void start_sds ()
Const uint8_t start_sds_cmd [] =
0xaa, 0xb4, 0x06, 0x01, 0x01,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0x05, 0xab & gt ;;
Serialsds.
Is_sds_running = true;
>
// Atur siklus tugas
Void set_sds_duty (uint8_t d)
Uint8_t cmd [] =
0xaa, 0xb4, 0x08, 0x01, 0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0x0a, 0xab & gt ;;
CMD [4] = D;
Unsigned int checksum = 0;
untuk (int i = 2; i
Checksum += cmd [i];
Checksum = checksum % 0x100;
CMD [17] = checksum;
Serialsds.
>
/* ****************************************************************
/* SDS011 menghentikan sensor
/**************************************************************** */
Void stop_sds ()
Cons uint8_t stop_sds_cmd [] =
0xaa, 0xb4, 0x06, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0x05, 0xab & gt ;;
Serialsds.
Is_sds_running = false;
>
// Atur mode inisiatif
Void set_initiative_sds ()
// aa, 0xb4, 0x08, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfff, 0xfff, 0xab
Cons uint8_t stop_sds_cmd [] =
0xaa, 0xb4, 0x08, 0x01, 0x03,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0x0a, 0xab & gt ;;
Serialsds.
Is_sds_running = false;
>
/* ****************************************************************
/* SDS011 Baca nilai sensor.
/**************************************************************** */
Sds_version_date ()
Const UInt8_t Version_SDS_CMD [] = sds_version_date ()< 0xAA , 0xB4 , 0x07 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xFF , 0xFF , 0x05 , 0xAB >;
String karakter s = “;
String karakter value_hex;
Buffer char;
nilai int;
int len ​​= 0;
String version_date = “”;
String device_id = “”;
int checksum_is;
int checksum_ok = 0;
posisi int = 0;
Debug_out (f (“Mulai membaca tanggal versi SDS011”), 1)
Start_sds ();
Tunda (100);
Serialsds.
Tunda (100);
While (Serialsds. Tersedia () & gt; 0)
Buffer = serialsds.
// debug_out (string (len) + ” -” + string (buffer, dec) + ” -” + string (buffer, hex) + ” -” + int (buffer) + “.”, 1)
// “aa” = 170, “ab” = 171, “c0” = 192
Nilai = int (buffer);
Switch (Len)
Case (0):
If (value! = 170)
len = -1;
>;
MERUSAK;
Case (1):
If (value! = 197)
len = -1;
>;
MERUSAK;
Case (2):
If (value! = 7)
len = -1;
>;
MERUSAK;
Case (3):
Version_date = string (value);
Checksum_is = 7 + nilai;
MERUSAK;
Case (4):
Version_Date + = ” -” + String (value);
Checksum_is += nilai;
MERUSAK;
Case (5):
Version_Date + = ” -” + String (value);
Checksum_is += nilai;
MERUSAK;
Case (6):
If (nilai< 0x10 )
device_id = “0” + string (value, hex);
>
kalau tidak
device_id = string (value, hex);
>;
Checksum_is += nilai;
MERUSAK;
Case (7):
If (nilai< 0x10 )
Device_id += “0”;
>;
device_id += string (value, hex);
Checksum_is += nilai;
MERUSAK;
Case (8):
debug_out (f (“checksum adalah:”), 0);
debug_out (string (checksum_is % 256), 0);
debug_out (f (“-shoud:”), 0);
debug_out (string (value), 1);
If (value == (checksum_is % 256))
Checksum_ok = 1;
>
kalau tidak
len = -1;
>;
MERUSAK;
Case (9):
If (value! = 171)
len = -1;
>;
MERUSAK;
>
len ++;
jika (len == 10 & amp;& amp; checksum_ok == 1 )
s = tanggal_versi + “(” + id_perangkat + “)”;
debug_out ( F (” Tanggal versi SDS : ” ), 0 );
debug_out ( tanggal_versi, 1 );
debug_out ( F (” ID perangkat SDS: ” ), 0 );
debug_out (id_perangkat, 1 );
len = 0;
checksum_ok = 0;
tanggal_versi = β€œ ” ;
perangkat_id = β€œ ”;
checksum_is = 0;
>
menghasilkan ();
>
debug_out ( F (“Akhir membaca tanggal versi SDS011” ), 1 );
Kembali S;
>
sensor stringSDS()
String karakter s = “;
String karakter value_hex;
Buffer char;
nilai int;
int len ​​= 0;
int pm10_serial = 0;
int pm25_serial = 0;
int checksum_is;
int checksum_ok = 0;
posisi int = 0;
While (Serialsds. Tersedia () & gt; 0)
Buffer = serialsds.
// debug_out (string (len) + ” -” + string (buffer, dec) + ” -” + string (buffer, hex) + ” -” + int (buffer) + “.”, 1)
// “aa” = 170, “ab” = 171, “c0” = 192
nilai = tidak ditandatangani (buffer);
Switch (Len)
Case (0):
If (value! = 170)
len = -1;
>;
MERUSAK;
Case (1):
jika (nilai != 192 )
len = -1;
>;
MERUSAK;
Case (2):
pm25_serial = nilai;
checksum_is = nilai;
MERUSAK;
Case (3):
pm25_serial += (nilai
Checksum_is += nilai;
MERUSAK;
Case (4):
pm10_serial = nilai;
Checksum_is += nilai;
MERUSAK;
Case (5):
pm10_serial += (nilai
Checksum_is += nilai;
MERUSAK;
Case (6):
Checksum_is += nilai;
MERUSAK;
Case (7):
Checksum_is += nilai;
MERUSAK;
Case (8):
// debug_out(“Checksum adalah: ” + String(checksum_is % 256) + “/” + String(checksum_is) + ” – seharusnya: ” + String(nilai), 1);
If (value == (checksum_is % 256))
Checksum_ok = 1;
>
kalau tidak
len = -1;
>;
MERUSAK;
Case (9):
If (value! = 171)
len = -1;
>;
MERUSAK;
>
len ++;
jika (len == 10 & amp;& amp; checksum_ok == 1 )
// debug_out(“Len 10 dan checksum OK”, 1);
if ((! isnan (pm10_serial)) & amp;& amp; (! isnan (pm25_serial)))
// debug_out(“Kedua nilai adalah angka”, 1);
if (lastwrite == 0 || millis() & gt; lastwrite + TS_DELAY) // lastwrite adalah nol.
tulis terakhir = milis();
debug_out( ” PM10 : ” + Float2String ( float (pm10_serial) / 10 ), 1 );
debug_out ( “ PM2. 5 : ” + Float2String ( float (pm25_serial) / 10 ), 1 );
debug_out( ” temp : ” + Float2String ( float (DHT_readings. temp ) ), 1 );
debug_out( “Kelembaban : ” + Float2String ( float (DHT_readings. hum ) ), 1 );
ThingSpeak. setField ( 1 , float (pm10_serial) / 10 );
setField ( 2 , mengambang (pm25_serial) / 10 );
setField ( 3 , DHT_readings. temp );
ThingSpeak. setField ( 4 , DHT_readings. hum );
ThingSpeak. writeFields (MyChannelNumber, myWriteAPIKey);
>
>
len = 0;
checksum_ok = 0;
pm10_serial = 0, 0;
pm25_serial = 0, 0;
checksum_is = 0;
>
menghasilkan ();
>
Kembali S;
>
Klien Wificlient;
Void clearserial ()
While (Serialsds. Tersedia ())
Serialsds. read ();
>
>
Void setup ()
// analogreference (eksternal);
Serial.
ESP_CHIPID = String (esp. Getchipid ());
Wifi.
Wifi.
While (wifi. Status ()! = Wl_connected)
Tunda (500);
Serial.
>
Serial.
Serial.
Serial.
Serial.
status int = wl_idle_status;
Thingspeak. begin;
Serialsds.
Tunda (10);
debug_out (“\ n chipid:”, 0);
debug_out (esp_chipid, 1);
setup_dht ();
Delay (2000);
// Atur WatchDogTimer ke 30 detik karena NODEMCU dapat dihentikan karena transmisi data dan pemrosesan paralel dari halaman web.
wdt_disable ();
wdt_enable (30000);
Serial.
set_sds_duty (0);
>
Void loop ()
Read_dht ();
Sensorsds ();
Tunda (1000);
Serial.
Serial.
>