Мазмуну:

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

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

Video: IoT аба ырайы станциясы RPi жана ESP8266 менен: 10 кадам
Video: Arduino Nano, BME280 и SSD1306 OLED-метеостанция 2024, Ноябрь
Anonim
IoT аба ырайы станциясы RPi жана ESP8266 менен
IoT аба ырайы станциясы RPi жана ESP8266 менен

Мурунку үйрөткүчтөрдө биз NodeMCU, сенсорлор менен ойноп, ThingSpeak (булуттагы сенсор маалыматтарын чогултууга жана сактоого жана IoT тиркемелерин иштеп чыгууга мүмкүндүк берген нерселердин Интернети (IoT) платформасында) маалыматтарды кантип тартып алууну жана жазууну үйрөнгөнбүз:

IOT MADE EASY: АЛЫСТЫН АБА ДЕРЕКТЕРИН ТАРТУУ: UV ЖАНА АБА ТЕМПЕРАТУРАСЫ & НЫМДУУЛУК

Бул жаңы үйрөткүч менен биз бир эле нерсени кантип жасоону үйрөнөбүз, бирок бул убакта Raspberry Pi менен бир нече ар кандай сенсорлордон маалыматтарды алуу үчүн, ошондой эле түзмөктөр менен интернет ортосунда баарлашуунун ар кандай жолдорун изилдөө:

Сенсорлор жана байланыштын түрү:

  • DHT22 (Температура жана Нымдуулук) ==> Санариптик байланыш
  • BMP180 (Температура жана басым) ==> I2C протоколу
  • DS18B20 (Температура) ==> 1-Зымдуу Протокол

Блок диаграммасы бул долбоордун аягында эмнени ала тургандыгыбызды көрсөтөт:

Сүрөт
Сүрөт

1 -кадам: BoM - Билл материалдар

  1. Raspberry Pi V3 - 32.00 АКШ доллары
  2. DHT22 Температура жана Салыштырмалуу Нымдуулук Сенсору - USD 9.95
  3. Резистор 4K7 ом
  4. DS18B20 суу өткөрбөйт температура сенсор - USD 5.95
  5. Резистор 4K7 ом
  6. BMP180 Барометрдик басым, температура жана бийиктик сенсору - USD 6.99

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

Температура жана нымдуулук сенсорун орнотуу
Температура жана нымдуулук сенсорун орнотуу

Орнотула турган биринчи сенсор абанын температурасын жана салыштырмалуу нымдуулукту кармоо үчүн DHT22 болот. ADAFRUIT сайты ошол сенсорлор жөнүндө сонун маалымат берет. Беллов, кээ бир маалыматтар ал жактан алынды:

Обзор

DHTнын төмөн температурасы жана нымдуулугу сенсорлору эң жөнөкөй жана жай, бирок кээ бир негизги маалыматтарды жазууну каалаган хоббисттер үчүн сонун. DHT сенсорлору эки бөлүктөн, сыйымдуу нымдуулук сенсорунан жана термистордон турат. Санарип конверсиясына окшош болгон жана температурасы жана нымдуулугу менен санариптик сигналды бөлүп чыгаруучу абдан негизги чип дагы бар. Санариптик сигналды каалаган микроконтроллердин жардамы менен окуу оңой.

DHT22 Негизги мүнөздөмөлөрү:

  • Төмөн наркы
  • 3 5V кубаттуулугу жана I/O
  • 2.5mA максималдуу учурдагы айландыруу учурунда колдонуу (маалыматтарды сурап жатканда)
  • 2-5% тактык менен 0-100% нымдуулук көрсөткүчтөрү үчүн жакшы
  • -40тан 125 ° Cга чейинки температура көрсөткүчтөрү ± 0,5 ° C тактык үчүн жакшы
  • Тандоо ылдамдыгы 0,5 Гцтен ашпайт (2 секундда бир жолу)
  • Дененин өлчөмү 15.1mm x 25mm x 7.7mm
  • 0,1 дюйм аралык менен 4 казык

Адатта сенсорду 20мден аз аралыкта колдонсоңуз, маалыматтар менен VCC казыктарынын ортосунда 4K7 омдук резистор туташтырылышы керек. DHT22 чыгаруу маалымат пини Raspberry GPIO 16. менен туташат. Жогорудагы электр диаграммасын текшерип, сенсорду RPi казыктарына төмөндөгүдөй туташтырыңыз:

  1. Pin 1 - Vcc ==> 3.3V
  2. Pin 2 - Маалымат ==> GPIO 16
  3. Pin 3 - Туташпаңыз
  4. Pin 4 - Gnd ==> Gnd

Vcc жана Data казыктарынын ортосунда 4K7 ohm каршылыгын орнотууну унутпаңыз

Сенсор туташкандан кийин, биз анын китепканасын биздин 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: print (' Окуу алынбай калды. Кайталап көрүңүз! ')

Программаны төмөнкү буйрук менен аткарыңыз:

python3 DHT22_test.py

Төмөндөгү Терминалды басып чыгаруу экраны натыйжаны көрсөтөт.

Сүрөт
Сүрөт

3 -кадам: DS18B20 орнотуу - Температура сенсору

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

Сенсорго сереп:

Биз бул окуу куралында DS18B20 сенсорунун суу өткөрбөгөн версиясын колдонобуз. Бул нымдуу шарттарда, мисалы, нымдуу жерде алыскы температура үчүн абдан пайдалуу. Сенсор изоляцияланган жана 125oCге чейин өлчөй алат (Adafrut кабелдик ПВХ пиджактан улам 100оСтен жогору колдонууну сунуштабайт).

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

Сенсор 3.0дан 5.0Vга чейин иштейт, бул 3.3Vдан Raspberry казыктарынын бири (1 же 17) менен камсыздалат дегенди билдирет.

Сенсордо 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 цельсий" % температура) time.sleep (1)

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

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

Сенсорго сереп:

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

Толук BMP маалымат барагын бул жерден тапса болот: BMP180 - Digital Pressure Sensor

Сенсорду орнотуу: Жогорудагы диаграмманы аткарыңыз жана туташууларды түзүңүз:

  • Vin ==> 3.3V
  • GND ==> GND
  • SCL ==> GPIO 3
  • SDA ==> GPIO 2

I2C интерфейсин иштетүү

RPi конфигурациясына өтүңүз жана I2C интерфейси иштетилгенин ырастаңыз. Болбосо, аны иштетип, RPi'ди өчүрүп күйгүзүңүз.

BMP180 колдонуу

Эгерде баары ойдогудай орнотулган болсо жана баары жакшы туташкан болсо, сиз азыр Пиңизди күйгүзүп, BMP180тин айланаңыздагы дүйнө жөнүндө эмне деп жатканын көрө баштоого даярсыз.

Биринчи нерсе, Pi сиздин BMP180иңизди көрөр -көрбөсүн текшерүү. Терминал терезесинде төмөнкүлөрдү байкап көрүңүз:

sudo i2cdetect -y 1

Эгерде буйрук иштесе, BMP180 '77' каналында экенин көрсөтүп, жогорудагы Терминалдын Принс экраны окшош нерсени көрүшүңүз керек.

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 () басып чыгаруу ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) басып чыгаруу (' Pressure = {0: 0.2f} Pa 'катары импорттоо). формат (sensor.read_pressure ())) басып чыгаруу ('Бийиктик = {0: 0.2f} m'.формат (sensor.read_altitude ())) басып чыгаруу (' Sealevel Pressure = {0: 0.2f} Pa'.format (сенсор).read_sealevel_pressure ()))

Тест программасын аткарыңыз:

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 hPa = 0.01450377 psi (чарчы дюймга фунт)
  • 1 hPa = 0.02953337 inHg (дюйм сымап)
  • 1 hpa = 0.00098692 атм (стандарттык атмосфера)

Температура эффекттери

Температура газдын тыгыздыгына, тыгыздык газдын массасына, ал эми массасы басымга таасирин тийгизгендиктен, атмосфералык басым температурага жараша кескин өзгөрөт. Учкучтар муну "тыгыздык бийиктиги" деп билишет, бул ысыкка караганда суук күнү учууну жеңилдетет, анткени аба тыгызыраак жана аэродинамикалык эффекти көбүрөөк. Температуранын ордун толтуруу үчүн, BMP180 жакшы температура сенсорун жана басым сенсорун камтыйт.

Кысымдуу окууну аткаруу үчүн, адегенде температуранын көрсөткүчү алынат, андан кийин аны чийки басымдын көрсөткүчү менен бириктирип, акыркы температуранын ордун толтуруучу басымдын өлчөөсү пайда болот. (Китепкана мунун баарын абдан жеңилдетет.)

Абсолюттук басымды өлчөө

Эгерде сиздин колдонмо абсолюттук басымды өлчөөнү талап кылса, анда температуранын көрсөткүчүн алуу гана жетиштүү, андан кийин басымдын көрсөткүчүн аткарыңыз (чоо -жайын мисалдын эскизин караңыз). Акыркы басым көрсөткүчү hPa = mbar болот. Кааласаңыз, муну жогорудагы конверсиялык факторлорду колдонуу менен башка бирдикке айландырсаңыз болот.

Атмосферанын абсолюттук басымы сиздин бийиктигиңизге жана учурдагы аба ырайыңызга жараша өзгөрөт, экөө тең өлчөө үчүн пайдалуу нерселер.

Аба ырайына байкоо жүргүзүү

Жердин каалаган жеринде (же атмосферасы бар жерде) атмосфералык басым туруктуу эмес. Жердин айлануусу, огунун кыйшайышы жана башка көптөгөн факторлордун ортосундагы татаал өз ара аракеттенүү жогорку жана төмөнкү басымдын жылышына алып келет, бул болсо күн сайын аба ырайынын өзгөрүшүнө алып келет. Басымдын өзгөрүшүн байкоо менен, аба ырайынын кыска мөөнөттүү өзгөрүүсүн алдын ала айтсаңыз болот. Мисалы, басымдын түшүшү адатта нымдуу аба ырайынын же бороон жакындап калганын билдирет (төмөн басым системасы жылып жатат). Көтөрүлүүчү басым, адатта, ачык аба ырайы жакындап калганын билдирет (жогорку басым системасы жылып баратат). Бирок, атмосфера басымы бийиктикке жараша өзгөрөөрүн унутпаңыз. Менин үйүмдөгү абсолюттук басым, Чилидеги Ло Барнече (бийиктиги 950м) дайыма Сан -Францискодогу абсолюттук басымга караганда төмөн болот (2 метрден аз, дээрлик деңиз деңгээлинен). Эгерде метеостанциялар абсолюттук басымын билдирсе, басымдын өлчөөлөрүн бир жерден экинчи жерге салыштыруу кыйын болмок (жана аба ырайынын масштабдуу божомолдору мүмкүн болушунча көп станциялардын өлчөөсүнө жараша болот).

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

Бул үчүн китепканада деңиз деңгээли (P, A) деп аталган функция бар. Бул hPa абсолюттук басымын (P) жана метрдин станциясынын учурдагы бийиктигин (A) талап кылат жана бийиктиктин таасирин басымдан алып салат. Бул функциянын чыгышын аба ырайынын көрсөткүчтөрүн дүйнө жүзүндөгү башка станцияларга түз салыштыруу үчүн колдоно аласыз.

Бийиктикти аныктоо

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

Эгерде сиз деңиз деңгээлинин басымын (1013,25 гПа) базалык басым (p0) катары колдонсоңуз, теңдеменин чыгышы деңиз деңгээлинен сиздин учурдагы бийиктигиңиз болот. Китепканада "эсептелген бийиктикти" алууга мүмкүндүк берген бийиктик (P, P0) деген функция бар.

Жогорудагы түшүндүрмө BMP 180 Sparkfun окуу куралынан алынган.

6 -кадам: Толук HW

Толук HW
Толук HW

7 -кадам: ThingSpeakке маалыматтарды жөнөтүү

ThingSpeakке маалыматтарды жөнөтүү
ThingSpeakке маалыматтарды жөнөтүү

Бул жерде биз бардык 3 сенсорлордон маалыматтарды басып алууга RPiди кантип даярдоону үйрөнүп, аларды терминалга басып чыгардык. Эми, бул маалыматтарды IoT платформасына ThingSpeakке кантип жөнөтүү керек экенин көрүүгө убакыт келди.

Баштайлы!

Биринчиден, сизде ThinkSpeak.comдо эсеп болушу керек

Канал түзүү үчүн көрсөтмөлөрдү аткарыңыз жана Канал идентификаторуңузду жазыңыз жана API ачкычын жазыңыз

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

Келгиле, коддун эң маанилүү бөлүктөрүн комментарийлеп көрөлү:

Биринчиден, ThingSpeak китепканасын импорттоп, WiFi кардарын аныктап, жергиликтүү роутериңизди жана Thinkspeak грамоталарын аныктайлы:

нерселерди импорттоо

ThingSpeak менен баарлашуунун бир нече жолдору бар, эң жөнөкөй ыкмасы кардар китепканасын Mikolaj Chwaliz жана Keith Ellis тарабынан иштелип чыккан 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_B5P5P0P0P5 Глобалдык "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 эч ким эмес: humLab = тегерек (humDHT

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

def sendDataTs ():

data = {"field1": tempLab, "field2": tempExt, "field3": humLab, "field4": presSL, "field5": altLab} ts.update (data) print ("[INFO] Маалымат 5 талаа үчүн жөнөтүлгөн: ", tempLab, tempExt, humLab, presSL, altLab)

Каналыңыздын маалыматы жаңыртылганда, скриптти сактап, терминалыңызда аткарыңыз:

sudo Python3 localData_ToTs_v1_EXT.py

Байланыш протоколдору жөнүндө

Эске алыңыз, "нерселер китепканасын" колдонуп, "суроо китепканасы" импорттолот, бул Python тилинде жазылган Apache2 лицензияланган HTTP китепканасы. Расмий Орнотуу документтерин бул жерден тапса болот:

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

Керек болсо, скриптиңизди иштетүүдөн мурун, сурамдар китепканасы орнотулгандыгын текшере аласыз:

sudo pip3 орнотуу сурамдары

Кааласаңыз, ThingSpeak -ке маалыматтарды жөнөтүү ыкмасы катары MTTQ колдоно аласыз. MQTT HTTPден айырмаланып турат, ал бир аз жеңилдетилген жана RAM жана CPU иштөөсү төмөн болгон камтылган түзмөктөргө арналган. Ошондой эле, көпчүлүк учурларда, MQTT азыраак өткөрүү жөндөмдүүлүгүн колдонот.

Бул окуу куралын караңыз: Көбүрөөк маалымат алуу үчүн Raspberry Piдеги MQTTди колдонуп ThingSpeak Каналын жаңыртыңыз.

8 -кадам: ESP8266 аркылуу ThingSpeakке алыскы маалыматтарды жөнөтүү

ThingSpeakке ESP8266 аркылуу алыскы маалыматтарды жөнөтүү
ThingSpeakке ESP8266 аркылуу алыскы маалыматтарды жөнөтүү
ThingSpeakке ESP8266 аркылуу алыскы маалыматтарды жөнөтүү
ThingSpeakке ESP8266 аркылуу алыскы маалыматтарды жөнөтүү

Бул кадам үчүн, биз үйрөткүчтө түшүндүрүлгөн ошол эле HWди колдонобуз:

IOT MADE EASY: АЛЫСТЫН АБА ДЕРЕКТЕРИН ТАРТУУ: UV ЖАНА АБА ТЕМПЕРАТУРАСЫ & НЫМДУУЛУК

Бул жерде колдонула турган код негизинен ошол окуу куралында колдонулат. Келгиле, коддун эң маанилүү бөлүктөрүн комментарийлеп көрөлү:

Биринчиден, ESP8266 китепканасына чалып, WiFi кардарын аныктап, жергиликтүү роутериңизди жана Thinkspeak грамоталарын аныктайлы:

/ * NodeMCU ESP12-E */

#WiFiClient кардарын кошуу; const char* MY_SSID = "SSDID МЕНЕН КИРҮҮ"; const char* MY_PWD = "ПАРОЛУҢАР МЕНЕН КИРГИЛЕ"; /* Thinkspeak*/ const char* TS_SERVER = "api.thingspeak.com"; String TS_API_KEY = "ЖАЗУУ АЧКЫЧЫҢАР МЕНЕН КИРГИЛЕ";

Экинчиден, IOT долбоорлору үчүн абдан маанилүү китепкананы киргизели: SimpleTimer.h:

/ * ТАЙМЕР */

#SimpleTimer таймерин кошуу;

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

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

{… 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 += String (hum); postStr += "& field8 ="; postStr += String (dataSensorUV); postStr += "\ r / n / r / n"; client.print ("POST /update 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 -кадам: Акыркы эскертүүлөр

Final Notes
Final Notes

Бул үйрөткүчтүн негизги максаты 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 веб -серверине негизделген алыскы аба ырайы станциясындагы маалыматтарды борбордук станцияга жөнөтөбүз:

Сүрөт
Сүрөт

Дүйнөнүн түштүгүнөн салам!

Кийинки көрсөтмөмдө көрүшкөнчө!

Рахмат, Marcelo

Сунушталууда: