Мазмұны:

RPi және ESP8266 бар IoT ауа райы станциясы: 10 қадам
RPi және ESP8266 бар IoT ауа райы станциясы: 10 қадам

Бейне: RPi және ESP8266 бар IoT ауа райы станциясы: 10 қадам

Бейне: RPi және ESP8266 бар IoT ауа райы станциясы: 10 қадам
Бейне: Arduino Nano, BME280 және SSD1306 OLED ауа райы станциясы 2024, Қараша
Anonim
RPi және ESP8266 бар IoT ауа райы станциясы
RPi және ESP8266 бар IoT ауа райы станциясы

Алдыңғы оқулықтарда біз NodeMCU -мен, сенсорлармен ойнадық және ThingSpeak (Интернеттегі заттар (IoT) платформасында сенсорлық мәліметтерді бұлтта жинауға және сақтауға және IoT қосымшаларын жасауға мүмкіндік беретін) деректерді алуды және тіркеуді үйрендік.

IOT MADE EASY Easy: ҚАШЫҚТАҒЫ АУА ДЕРЕКТЕРІН ТҮСІРУ: ультракүлгін және ауа температурасы мен ылғалдылық

Бұл жаңа оқулықпен біз дәл осылай істеуді үйренеміз, бірақ дәл осы уақытта Raspberry Pi көмегімен бірнеше түрлі сенсорлардан деректерді жинаймыз, сонымен қатар құрылғылар мен желілер арасындағы байланыстың әр түрлі әдістерін зерттейміз:

Датчиктер мен байланыс түрі:

  • DHT22 (Температура мен ылғалдылық) ==> Сандық байланыс
  • BMP180 (температура мен қысым) ==> I2C хаттамасы
  • DS18B20 (температура) ==> 1 сымды протокол

Блок диаграммасы осы жобаның соңында не алатынымызды көрсетеді:

Кескін
Кескін

1 -қадам: Банк - Билл материалдары

  1. Raspberry Pi V3 - 32,00 АҚШ доллары
  2. DHT22 температура мен салыстырмалы ылғалдылық сенсоры - 9,95 АҚШ доллары
  3. 4K7 Ом резисторы
  4. DS18B20 су өткізбейтін температура сенсоры - 5,95 АҚШ доллары
  5. 4K7 Ом резисторы
  6. BMP180 Барометрлік қысым, температура мен биіктік датчигі - USD 6.99

2 -қадам: Температура мен ылғалдылық сенсорын орнату

Температура мен ылғалдылық сенсорын орнату
Температура мен ылғалдылық сенсорын орнату

Орнатылатын бірінші сенсор ауа температурасы мен салыстырмалы ылғалдылық деректерін алуға арналған DHT22 болады. ADAFRUIT сайты сол сенсорлар туралы керемет ақпарат береді. Төменде кейбір ақпарат алынды:

Шолу

DHT төмен температура мен ылғалдылық сенсорлары өте қарапайым және баяу, бірақ кейбір деректерді тіркеуді қалайтын әуесқойлар үшін өте қолайлы. DHT сенсорлары екі бөліктен тұрады: сыйымдылық ылғалдылығы сенсоры мен термистор. Сонымен қатар, цифрлық түрлендіруге ұқсайтын және температурасы мен ылғалдылығы бар цифрлық сигналды шығаратын өте қарапайым чип бар. Сандық сигналды кез келген микроконтроллердің көмегімен оқу өте оңай.

DHT22 Негізгі сипаттамалары:

  • Төмен баға
  • 3 -тен 5В -қа дейінгі қуат және енгізу -шығару
  • Түрлендіру кезінде 2,5 мА токты максималды пайдалану (деректерді сұрау кезінде)
  • 2-5% дәлдікпен 0-100% ылғалдылық көрсеткіштері үшін жақсы
  • -40 -тан 125 ° C -қа дейінгі температура көрсеткіштері үшін ± 0,5 ° C дәлдік үшін жақсы
  • Таңдау жиілігі 0,5 Гц -тен аспайды (2 секундта бір рет)
  • Дене өлшемі 15.1mm x 25mm x 7.7mm
  • 0,1 дюйм аралығы бар 4 түйреуіш

Әдетте сенсорды 20 м -ден аз қашықтықта қолданатын болсаңыз, Data мен VCC түйреуіштері арасында 4K7 Ом резисторы қосылуы керек. DHT22 шығыс деректер түйіні Raspberry GPIO 16 -ға қосылады. Сенсорды RPi түйреуіштеріне төмендегідей қосатын жоғарыдағы электр схемасын тексеріңіз:

  1. 1 түйреуіш - Vcc ==> 3.3V
  2. 2 -түйреуіш - Деректер ==> GPIO 16
  3. 3 -түйін - Қосылмаңыз
  4. 4 -түйреуіш - Gnd ==> Gnd

Vcc пен Data түйреуіштері арасында 4K7 Ом резисторды орнатуды ұмытпаңыз

Сенсор қосылғаннан кейін біз оның кітапханасын RPi -ге орнатуымыз керек.

DHT кітапханасын орнату:

Таңқурайыңызда /үйден бастап /Құжаттарға өтіңіз

cd құжаттары

Кітапхананы орнату үшін каталог жасаңыз және оған көшіңіз:

mkdir DHT22_Sensor

cd DHT22_Sensor

Браузерде Adafruit GitHub өтіңіз:

github.com/adafruit/Adafruit_Python_DHT

Оң жақтағы жүктеу zip сілтемесін басу арқылы кітапхананы жүктеңіз және жақында жасалған Raspberry Pi қалтасындағы мұрағатты ашыңыз. Содан кейін кітапхана каталогына өтіңіз (файлды ашқан кезде автоматты түрде жасалынатын ішкі қалта) және пәрменді орындаңыз:

sudo python3 setup.py орнату

Менің GITHUB -дан тестілік бағдарламаны (DHT22_test.py) ашыңыз

Adafruit_DHT импорттау

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 ылғалдылық, температура = Adafruit_DHT.read_retry (DHT22Sensor, DHTpin), егер ылғалдылық жоқ болса және температура жоқ болса: басып шығару ('Temp = {0: 0.1f}*C Ылғалдылық = {1: 0.1 f}%'. форматы (температура, ылғалдылық)) else: басып шығару (' Оқуды алу мүмкін болмады. Қайталап көріңіз! ')

Бағдарламаны келесі пәрменмен орындаңыз:

python3 DHT22_test.py

Төмендегі Терминалды басып шығару экраны нәтижені көрсетеді.

Кескін
Кескін

3 -қадам: DS18B20 - температура сенсорын орнату

DS18B20 - температура сенсорын орнату
DS18B20 - температура сенсорын орнату
DS18B20 - температура сенсорын орнату
DS18B20 - температура сенсорын орнату

Сенсорға шолу:

Біз бұл оқулықта DS18B20 датчигінің су өткізбейтін нұсқасын қолданамыз. Ылғалды жағдайда, мысалы ылғалды топырақта, қашықтан температура үшін өте пайдалы. Сенсор оқшауланған және 125oC дейін өлшеуге қабілетті (Adafrut кабельді ПВХ пиджакінің арқасында оны 100oC -тан жоғары пайдалануды ұсынбайды).

DS18B20 - бұл сандық сенсор, ол тіпті алыс қашықтықта қолдануды жақсы етеді! Бұл 1 сымды цифрлық температура датчиктері өте дәл (диапазонның көп бөлігінде ± 0,5 ° C) және цифрлық-аналогтық түрлендіргіштен 12 битке дейін дәлдік бере алады. Олар NodeMCU-мен бір цифрлық түйреуішпен жақсы жұмыс істейді, және сіз бірнеше түйіндерді бір істікке қосуға болады, олардың әрқайсысында оларды ажырату үшін зауытта 64 биттік бірегей идентификаторы бар.

Сенсор 3,0 -дан 5,0 В -қа дейін жұмыс істейді, бұл оны Raspberry түйреуіштерінің бірімен (1 немесе 17) қамтамасыз ететін 3.3В -тан тікелей қуат алуға болатынын білдіреді.

Сенсорда 3 сым бар:

  • Қара: GND
  • Қызыл: VCC
  • Сары: 1 сымды деректер

Мұнда сіз толық ақпаратты таба аласыз: DS18B20 мәліметтер кестесі

Сенсорды орнату:

Жоғарыдағы диаграмманы орындаңыз және қосылымдарды жасаңыз:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Деректер ==> GPIO 4 (кітапхана үшін әдепкі)

Python кітапханасын орнату:

Содан кейін сенсормен жұмыс істейтін Python кітапханасын орнатамыз:

sudo pip3 w1thermsensor орнатыңыз

Сенсорды тексеру үшін сценарийді іске қоспас бұрын, сіздің RPi-де «1-Wire» интерфейсі қосылғанын тексеріңіз (жоғарыдағы басып шығару экранын қараңыз)

Конфигурациясын өзгерткеннен кейін, RPi қайта қосуды ұмытпаңыз

Сенсорды тексеру:

Сенсорды тексеру үшін қарапайым питон сценарийін қолдануға болады:

импорт уақыты

w1thermsensor импортынан W1ThermSensor ds18b20Sensor = W1ThermSensor () True болса: температура = ds18b20Sensor.get_temperature () басып шығару («Температура - % s цельсий» % температура) уақыт.ұйықтау (1)

4 -қадам: BMP180 орнату

BMP180 орнату
BMP180 орнату
BMP180 орнату
BMP180 орнату
BMP180 орнату
BMP180 орнату

Сенсорға шолу:

BMP180 - бұл BMP085 -тің ізбасары, тұтынушыларға арналған жоғары дәлдіктегі цифрлық қысым датчиктерінің жаңа буыны. BMP180 өте төмен қуатты, төмен кернеулі электроника ұялы телефондарда, PDA-де, GPS-навигациялық қондырғыларда және сыртқы жабдықта қолдануға оңтайландырылған. Төмен биіктіктегі шу тек 0,25 м жылдам конверсия кезінде BMP180 жоғары өнімділікті ұсынады. I2C интерфейсі микроконтроллермен жүйені оңай біріктіруге мүмкіндік береді. BMP180 EMC беріктігіне, жоғары дәлдікке және сызықтыққа, сондай-ақ ұзақ мерзімді тұрақтылыққа арналған пьезо-резистивті технологияға негізделген.

BMP толық кестесін мына жерден табуға болады: BMP180 - Сандық қысым датчигі

Датчикті орнату: жоғарыдағы диаграмманы орындаңыз және қосылуды жасаңыз:

  • Вин ==> 3.3В
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

I2C интерфейсін қосу

RPi конфигурациясына өтіңіз және I2C интерфейсінің қосылғанын растаңыз. Олай болмаса, оны қосыңыз және RPi қайта іске қосыңыз.

BMP180 көмегімен

Егер бәрі дұрыс орнатылған болса, және бәрі жақсы қосылған болса, сіз енді Pi құрылғыңызды қосып, BMP180 сізге айналаңыздағы әлем туралы не айтып жатқанын көруге дайынсыз.

Біріншіден, Pi сіздің BMP180 -ді көретінін тексеру. Терминал терезесінде келесі әрекеттерді орындап көріңіз:

sudo i2cdetect -y 1

Егер команда жұмыс істесе, BMP180 '77' арнасында екенін көрсететін жоғарыдағы Terminal Printscreen экранына ұқсас нәрсені көру керек.

BMP180 кітапханасын орнату:

Кітапхананы орнату үшін каталог жасаңыз:

mkdir BMP180_Sensorcd BMP180_Sensor

Браузерде Adafruit GITHub өтіңіз:

github.com/adafruit/Adafruit_Python_BMP

Оң жақтағы жүктеу zip сілтемесін басу арқылы кітапхананы жүктеңіз және Raspberry Pi жасалған қалтасындағы мұрағатты ашыңыз. Содан кейін құрылған ішкі қалтаға өтіп, кітапхана каталогында келесі пәрменді орындаңыз:

sudo python3 setup.py орнату

Python IDE ашыңыз және тестілеу бағдарламасын жасаңыз және оны атаңыз, мысалы BMP180Test.py

Adafruit_BMP. BMP085 BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) print (' Қысым = {0: 0.2f} Па ') ретінде импорттаңыз. формат (sensor.read_pressure ())) басып шығару ('Биіктік = {0: 0.2f} m'.формат (sensor.read_altitude ())) басып шығару (' Sevelvel Pressure = {0: 0.2f} Pa'.format (сенсор).оқу_деңгейіндегі_қысым ()))

Тест бағдарламасын орындаңыз:

python3 BMP180Test.py

Жоғарыдағы Терминалды басып шығару экраны нәтижені көрсетеді.

Назар аударыңыз, бұл қысым Па (Паскаль) тілінде берілген. Бұл құрылғыны жақсы түсінбеу үшін келесі қадамды қараңыз.

5 -қадам: Ауа райы мен биіктікті BMP180 көмегімен өлшеу

Ауа райы мен биіктікті BMP180 көмегімен өлшеу
Ауа райы мен биіктікті BMP180 көмегімен өлшеу

BMP көрсеткіштерімен біз не алатынымыз туралы көбірек білуге уақыт бөлейік. Оқулықтың бұл бөлігін өткізіп жіберуге немесе кейінірек оралуға болады.

Егер сенсордың оқулары туралы көбірек білгіңіз келсе, мына керемет оқулыққа өтіңіз:

BMP180 атмосфералық қысымды дәл өлшеуге арналған. Атмосфералық қысым ауа райы мен биіктікке байланысты өзгереді.

Атмосфералық қысым дегеніміз не?

Атмосфералық қысымның анықтамасы - бұл айналадағы ауа бәріне әсер ететін күш. Атмосферадағы газдардың салмағы атмосфералық қысымды тудырады. Қысымның жалпы өлшем бірлігі - «фунт шаршы дюйм» немесе psi. Біз мұнда халықаралық белгілерді қолданамыз, яғни шаршы метрге Ньютондар, олар паскаль (Па) деп аталады.

Егер сіз ені 1 см болатын ауа бағанасын алсаңыз, салмағы шамамен 1 кг болар еді

Бұл бағанның ізін басу арқылы біз BMP180 сияқты датчиктермен өлшеуге болатын атмосфералық қысымды тудырамыз. Ені см болатын ауа бағанының салмағы шамамен 1 кг болатындықтан, теңіз деңгейінің орташа қысымы шамамен 101325 паскальды құрайды, немесе одан да жақсы - 1013,25 гПа (1 гПа милибар - мбар деп те аталады). Бұл сіз көтерілген әрбір 300 метрге шамамен 4% төмендейді. Сіз неғұрлым жоғары көтерсеңіз, соғұрлым қысым аз болады, өйткені атмосфераның жоғарғы жағындағы баған әлдеқайда қысқа, сондықтан салмағы аз. Мұны білу пайдалы, өйткені қысымды өлшеп, математиканы қолдана отырып, биіктікті анықтауға болады.

3,810 метрдегі ауа қысымы теңіз деңгейінен жартысын құрайды.

BMP180 абсолютті қысымды паскалға шығарады (Па). Бір паскаль - бұл қағаздың үстелге сүйенетін шамасы шамалы қысым. Өлшеуді гектопаскальдарда жиі көресіз (1 гПа = 100 Па). Мұнда пайдаланылатын кітапхана hPa-да өзгермелі нүкте мәндерін шығарады, ол бір милбарға (mbar) тең болады.

Міне, басқа қысым бірліктеріне бірнеше түрлендіру:

  • 1 гПа = 100 Па = 1 мбар = 0,001 бар
  • 1 гПа = 0,75006168 Торр
  • 1 гПа = 0.01450377 psi (шаршы дюйм үшін фунт)
  • 1 гПа = 0.02953337 дюйм сынап бағанасы (сынап дюймі)
  • 1 hpa = 0.00098692 атм (стандартты атмосфера)

Температуралық әсерлер

Температура газдың тығыздығына әсер етеді, ал тығыздық газдың массасына әсер етеді, ал массасы қысымға әсер етеді (атмосфералық қысым), температураға байланысты атмосфералық қысым күрт өзгереді. Ұшқыштар мұны «тығыздық биіктігі» деп біледі, бұл суық күні ыстыққа қарағанда ұшуды жеңілдетеді, себебі ауа тығызырақ және аэродинамикалық әсері жоғары. Температураны өтеу үшін BMP180 жақсы температура сенсорымен қатар қысым датчигін де қамтиды.

Қысымдық көрсеткішті орындау үшін сіз алдымен температураның көрсеткішін қабылдайсыз, содан кейін оны бастапқы қысым көрсеткішімен біріктіріп, соңғы температуралық компенсацияланған қысымды өлшеуді шығарасыз. (Кітапхана мұның бәрін жеңілдетеді.)

Абсолютті қысымды өлшеу

Егер сіздің өтініміңіз абсолютті қысымды өлшеуді қажет етсе, онда сіз тек температураның көрсеткішін алуыңыз керек, содан кейін қысым көрсеткішін орындаңыз (егжей -тегжейлі мысал эскизін қараңыз). Қысымның соңғы көрсеткіші hPa = mbar болады. Егер қаласаңыз, оны жоғарыдағы түрлендіру коэффициенттерін қолдана отырып, басқа қондырғыға айналдыра аласыз.

Назар аударыңыз, атмосфераның абсолюттік қысымы сіздің биіктігіңізге де, ауа райының ағымына да байланысты болады, екеуі де өлшеуге пайдалы.

Ауа райы бақылаулары

Жердің кез келген жерінде (немесе атмосферасы бар кез келген жерде) атмосфералық қысым тұрақты емес. Жердің айналуы, осьтің қисаюы және басқа да көптеген факторлар арасындағы күрделі өзара әрекеттесу жоғары және төмен қысымды аудандардың қозғалуына әкеледі, бұл өз кезегінде біз күн сайын ауа райының өзгеруіне әкеледі. Қысымның өзгеруін бақылай отырып, ауа райының қысқа мерзімді өзгеруін болжауға болады. Мысалы, қысымның төмендеуі әдетте ылғалды ауа райы немесе дауыл жақындап келе жатқанын білдіреді (төмен қысымды жүйе қозғалады). Қысымның жоғарылауы әдетте ашық ауа райының жақындағанын білдіреді (жоғары қысымды жүйе өтеді). Есіңізде болсын, атмосфералық қысым биіктікке байланысты өзгереді. Менің үйдегі абсолютті қысым, Чилидегі Ло Барнече (биіктігі 950 м), мысалы, Сан -Францискодағы абсолютті қысымнан төмен болады (2 метрден аз, теңіз деңгейінен дерлік). Егер метеостанциялар өздерінің абсолюттік қысымы туралы хабарлаған болса, онда қысымның бір жерден екінші жерге өлшенуін тікелей салыстыру қиын болар еді (және ауқымды ауа райы болжамдары мүмкіндігінше көп станциялардың өлшеулеріне байланысты).

Бұл мәселені шешу үшін метеорологиялық станциялар биіктіктің әсерін есептелген қысым көрсеткіштерінен алып тастайды, бұл эквивалентті тұрақты қысымды математикалық түрде қосу арқылы теңіз деңгейінен алынған сияқты көрінеді. Егер сіз мұны істесеңіз, Сан -Францискода Ло Барнечеге қарағанда жоғары көрсеткіш әрқашан биіктікке байланысты емес, ауа райына байланысты болады.

Ол үшін кітапханада теңіз деңгейі (P, A) деп аталатын функция бар. Бұл абсолютті қысымды (P) hPa -да және станцияның ағымдағы биіктігін (A) метрмен алады және биіктіктің әсерін қысымнан жояды. Сіз бұл функцияның нәтижесін ауа райы көрсеткіштерін әлемнің басқа станцияларымен тікелей салыстыру үшін пайдалана аласыз.

Биіктікті анықтау

Қысым биіктікке байланысты өзгеретіндіктен, биіктікті өлшеу үшін қысым датчигін қолдануға болады (бірнеше ескертулермен). Теңіз деңгейіндегі атмосфераның орташа қысымы 1013,25 гПа (немесе мбар) құрайды. Бұл бос кеңістікке көтерілгенде нөлге дейін төмендейді. Бұл түсудің қисығы жақсы түсінілгендіктен, қысымның екі өлшемі арасындағы биіктік айырмашылығын (p және p0) нақты теңдеуді қолдана отырып есептеуге болады.

Егер сіз негізгі қысым ретінде (p0) теңіз деңгейінің қысымын (1013,25 гПа) қолдансаңыз, онда теңдеудің шығысы теңіз деңгейінен сіздің қазіргі биіктігіңіз болады. Кітапханада биіктік (P, P0) деп аталатын функция бар, ол «есептелген биіктікті» алуға мүмкіндік береді.

Жоғарыда келтірілген түсініктеме BMP 180 Sparkfun оқулығынан алынды.

6 -қадам: Толық ЖЖ

Толық ЖЖ
Толық ЖЖ

7 -қадам: ThingSpeak -ке деректерді жіберу

ThingSpeak -ке деректерді жіберу
ThingSpeak -ке деректерді жіберу

Осы кезде біз барлық 3 датчиктерден деректерді алуға, оларды терминалға басып шығаруға RPi қалай дайындау керектігін білдік. Енді бұл деректерді IoT платформасына ThingSpeak -ке қалай жіберуге болатынын көрудің уақыты келді.

Бастайық!

Біріншіден, сізде ThinkSpeak.com сайтында тіркелгі болуы керек

Арна жасау үшін нұсқауларды орындаңыз және арна идентификаторы мен API кілтін жазыңыз

Python сценарийін GitHub -дан жүктеп алыңыз: localData ToTS_v1_EXT.py

Кодтың маңызды бөліктерін түсіндірейік:

Алдымен ThingSpeak кітапханасын импорттап, WiFi клиентін анықтап, жергілікті маршрутизатор мен Thinkspeak тіркелгі деректерін анықтайық:

нәрселерді импорттау

ThingSpeak -пен сөйлесудің бірнеше әдісі бар, ең қарапайым әдіс - клиенттер кітапханасын Миколай Чвализ мен Кейт Эллис әзірлеген thingspeak.com API үшін пайдалану.

Кітапхананы https://github.com/mchwalisz/thingspeak сайтынан жүктеп алуға болады немесе терминалда PIP қолдана аласыз:

sudo pip3 нәрселерді орнатыңыз

Содан кейін, сценарий ішінде ThingSpeak арнасының тіркелгі деректерін жаңартыңыз

chId = 9999999 # Арна идентификаторымен кіріңіз

tsKey = 'АРНАҢЫЗҒА КІРУ КІЛТІСІН ЖАЗУ' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Енді 3 сенсорды инициализациялайық:

# DS18B20 1-сымды кітапхана

w1thermsensor импортынан W1ThermSensor ds18b20Sensor = W1ThermSensor () # әдепкі бойынша GPIO 4 кітапханасында пайдаланылады # DHT22 Кітапхана импорты Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 кітапханасы Adafruit_B5P5Bmp0B8 Сіз «altReal» жаһандық айнымалысын жаңарта отырып, ауа райы станциясы орналасқан нақты биіктікті анықтауыңыз керек. Менің жағдайда, менің станциям теңіз деңгейінен 950 м биіктікте орналасқан

жаһандық altReal

altReal = 950

Станцияның нақты биіктігін енгізу ретінде енгізгеннен кейін bmp180GetData (биіктік) функциясын қолдана отырып, абсолютті қысымды, теңіз деңгейінің қысымын, температураны және биіктікті алуға болады:

def bmp180GetData (биіктік):

temp = bmp180Sensor.read_temperature () pres = bmp180Sensor.read_pressure () alt=bmp180Sensor.read_altitude () presSeaLevel = pres/pow (1.0 - биіктік/44330.0, 5.255) temp = round (temp, 1) pres = round (pres/100), 2) # абсолютті қысым hPa (немесе mbar) alt=дөңгелек (alt) presSeaLevel = дөңгелек (presSeaLevel/100, 2)

GetLocalData () функциясы біздің станция түсірген барлық жергілікті деректерді қайтарады:

def getLocalData ():

global timeString global humLab global tempExt global tempLab global presSL global altLab global presAbs # Қазір оқу уақытын алыңыз = datetime.datetime.now () timeString = now.strftime («%Y-%m-%d%H:%M») # Сыртқы температураны оқу (1 метрлік қашықтық) tempExt = дөңгелек (ds18b20Sensor.get_temperature (), 1) tempLab, presAbs, altLab, presSL = bmp180GetData (altReal) humDHT, tempDHT = Adafruit_DHT.read_retry (DHTPSensor, DHT22Sensor) және tempDHT None емес: humLab = дөңгелек (humDHT

Жоғарыда көрсетілген функциялардың көмегімен барлық деректерді алғаннан кейін оларды ThingSpeak -ке жіберу керек. Сіз оны sendDataTs () функциясын қолдана отырып жасайсыз:

def sendDataTs ():

data = {«field1»: tempLab, «field2»: tempExt, «field3»: humLab, «field4»: presSL, «field5»: altLab} ts.update (data) басып шығару («[INFO] 5 өріске жіберілген деректер: «, tempLab, tempExt, humLab, presSL, altLab)

Арна деректері жаңартылған кезде, сценарийді сақтап, оны терминалда орындаңыз:

sudo Python3 localData_ToTs_v1_EXT.py

Байланыс хаттамалары туралы

Назар аударыңыз, «thingspeak library» көмегімен «сұраныстар кітапханасы» импортталады, бұл Python тілінде жазылған Apache2 лицензияланған HTTP кітапханасы. Орнату туралы сұраныстың ресми құжаттамасын мына жерден табуға болады:

docs.python-requests.org/kz/latest/user/install/

Қажет болса, сценарийді іске қоспас бұрын, сұраныстар кітапханасының орнатылғанын тексере аласыз:

sudo pip3 орнату сұраулары

Қажет болса, ThingSpeak -ке деректерді жіберу әдісі ретінде MTTQ қолдануға болады. MQTT HTTP -тен ерекшеленеді, ол арнайы түрде жеңіл етіп жасалған және жедел жады мен процессордың өнімділігі төмен ендірілген құрылғыларға арналған. Сонымен қатар, көп жағдайда MQTT өткізу қабілетін аз пайдаланады.

Бұл оқулықты қараңыз: Қосымша ақпарат алу үшін Raspberry Pi -де MQTT көмегімен ThingSpeak арнасын жаңартыңыз.

8 -қадам: ESP8266 көмегімен ThingSpeak -ке қашықтағы деректерді жіберу

ThingSpeak -ке ESP8266 көмегімен қашықтағы деректерді жіберу
ThingSpeak -ке ESP8266 көмегімен қашықтағы деректерді жіберу
ThingSpeak -ке ESP8266 көмегімен қашықтағы деректерді жіберу
ThingSpeak -ке ESP8266 көмегімен қашықтағы деректерді жіберу

Бұл қадам үшін біз оқулықта түсіндірілген HW қолданамыз:

IOT MADE EASY Easy: ҚАШЫҚТАҒЫ АУА ДЕРЕКТЕРІН ТҮСІРУ: ультракүлгін және ауа температурасы мен ылғалдылық

Біз қолданатын код негізінен осы оқулықта қолданылады. Кодтың маңызды бөліктерін түсіндірейік:

Алдымен ESP8266 кітапханасына қоңырау шалыңыз, WiFi клиентін анықтап, жергілікті маршрутизатор мен Thinkspeak тіркелгі деректерін анықтайық:

/ * NodeMCU ESP12-E */

#WiFiClient клиентін қосыңыз; const char* MY_SSID = «SSDID -НЕН КІРУ»; const char* MY_PWD = «ПАРОЛЬНЕН КІРУ»; /* Thinkspeak*/ const char* TS_SERVER = «api.thingspeak.com»; Жол TS_API_KEY = «ЖАЗУ КІЛТІМЕН КІРУ»;

Екіншіден, IoT жобалары үшін өте маңызды кітапхананы қосайық: SimpleTimer.h:

/ * ТАЙМЕР */

#SimpleTimer таймерін қосыңыз;

Үшіншіден, () орнату кезінде біз сериялық байланысты бастаймыз, connectWiFi () функциясын шақырамыз және таймерлерді анықтаймыз. Назар аударыңыз, код жолы: timer.setInterval (60000L, sendDataTS); ThinkSpeak арнасына деректерді жүктеу үшін әр 60 секунд сайын sendDataTS () функциясына қоңырау шалады.

жарамсыз орнату ()

{… Serial.begin (115200); кешіктіру (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

Ақыр соңында, ең болмағанда, цикл () кезінде, таймерді іске қосу үшін қажет жалғыз пәрмен - бұл!

бос цикл ()

{… Timer.run (); // SimpleTimer қосады}

Төменде сіз Thinkspeak байланысын басқаруда қолданылатын екі маңызды функцияны көре аласыз:

WiFi желісімен ESP12-E байланысы:

/***************************************************

*WiFi байланысы ********************************************* ***/ void connectWifi () {Serial.print («Қосылу»+*MY_SSID); WiFi.begin (MY_SSID, MY_PWD); while (WiFi.status ()! = WL_CONNECTED) {кешігу (1000); Serial.print («.»); } Serial.println («»); Serial.println («WiFi қосылған»); Serial.println («»); }

ESP12-E мәліметтерді ThinkSpeak-ке жібереді:

***************************************************

*Деректерді Thinkspeak арнасына жіберу **************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += «& field6 =»; postStr += Жол (темп); postStr += «& field7 =»; postStr += Жол (хум); postStr += «& field8 =»; postStr += Жол (dataSensorUV); postStr += «\ r / n / r / n»; client.print («POST /HTTP жаңарту /1.1 / n»); client.print («Хост: api.thingspeak.com / n»); client.print («Байланыс: жабу / n»); client.print («X-THINGSPEAKAPIKEY:» + TS_API_KEY + «\ 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); кешіктіру (1000); } жіберілді ++; client.stop (); }

Толық кодты GitHub -дан табуға болады: NodeMCU_UV_DHT_Sensor_OLED_TS_EXT

Сізде NodeMCU коды жүктелген кезде. Сыртқы батареяны қосып, күн астында өлшеу жүргізейік. Мен қашықтағы станцияны төбеге қойып, ThingSpeak.com сайтында жоғарыдағы суреттерде көрсетілгендей деректерді жинай бастаймын.

9 -қадам: Қорытынды жазбалар

Қорытынды ескертулер
Қорытынды ескертулер

Бұл оқулықтың негізгі мақсаты Raspberry Pi -ді ThingSpeak -ке қалай қосу керектігін көрсету болды. Бұл деректерді алу және оларды IoT платформасында тіркеу үшін тамаша.

Мүмкіндікті пайдалана отырып, біз деректерді сол арнаға жібердік, оларды ESP8266 көмегімен қашықтағы станциядан түсірдік. Бұл әдіс жақсы, бірақ ең жақсы емес. Бізде «асинхронды» операция болғандықтан, кейде, екеуі де, RPi де, ESP8266 де ThingSpeak жоққа шығаратын деректерді бір уақытта (немесе кішкене интервалмен) тіркеуге тырысады. Идеал ESP8266 деректерді жергілікті түрде Raspberry Pi -ге жібереді, ал соңғысы барлық деректерді өңдеуге жауапты болады. Осылайша, «Негізгі станция» (Raspberry Pi) 3 нәрсені жасай алады:

  • Барлық деректерді жергілікті дерекқорға тіркеңіз
  • Барлық деректерді жергілікті веб -бетте көрсетіңіз (жоғарыдағы суретте көрсетілгендей колбаны қолданыңыз)
  • ThingSpeak -ке барлық деректерді бір уақытта жіберу.

Болашақ оқулықта біз бұл нұсқаларды қарастырамыз.

10 -қадам: Қорытынды

Қорытынды
Қорытынды

Әдеттегідей, бұл жоба басқаларға электрониканың қызықты әлеміне жол табуға көмектеседі деп сенемін!

Мәліметтер мен соңғы кодты алу үшін GitHub депозитарийіме кіріңіз: RPi-NodeMCU-Weather-Station

Басқа жобалар үшін менің блогыма кіріңіз: MJRoBot.org

Бізбен бірге қалыңыз! Келесі оқулықта біз Raspberry Pi веб -серверіне негізделген қашықтықтағы метеостанциядан деректерді орталыққа жібереміз:

Кескін
Кескін

Әлемнің оңтүстігінен сәлем!

Келесі нұсқаулықта кездескенше!

Рақмет сізге, Марсело

Ұсынылған: