Мазмуну:
- 1 -кадам: BoM - Билл материалдар
- 2 -кадам: Температура жана нымдуулук сенсорун орнотуу
- 3 -кадам: DS18B20 орнотуу - Температура сенсору
- 4 -кадам: BMP180 орнотуу
- 5 -кадам: BMP180 менен аба ырайы жана бийиктикти өлчөө
- 6 -кадам: Толук HW
- 7 -кадам: ThingSpeakке маалыматтарды жөнөтүү
- 8 -кадам: ESP8266 аркылуу ThingSpeakке алыскы маалыматтарды жөнөтүү
- 9 -кадам: Акыркы эскертүүлөр
- 10 -кадам: Жыйынтык
Video: IoT аба ырайы станциясы RPi жана ESP8266 менен: 10 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Мурунку үйрөткүчтөрдө биз NodeMCU, сенсорлор менен ойноп, ThingSpeak (булуттагы сенсор маалыматтарын чогултууга жана сактоого жана IoT тиркемелерин иштеп чыгууга мүмкүндүк берген нерселердин Интернети (IoT) платформасында) маалыматтарды кантип тартып алууну жана жазууну үйрөнгөнбүз:
IOT MADE EASY: АЛЫСТЫН АБА ДЕРЕКТЕРИН ТАРТУУ: UV ЖАНА АБА ТЕМПЕРАТУРАСЫ & НЫМДУУЛУК
Бул жаңы үйрөткүч менен биз бир эле нерсени кантип жасоону үйрөнөбүз, бирок бул убакта Raspberry Pi менен бир нече ар кандай сенсорлордон маалыматтарды алуу үчүн, ошондой эле түзмөктөр менен интернет ортосунда баарлашуунун ар кандай жолдорун изилдөө:
Сенсорлор жана байланыштын түрү:
- DHT22 (Температура жана Нымдуулук) ==> Санариптик байланыш
- BMP180 (Температура жана басым) ==> I2C протоколу
- DS18B20 (Температура) ==> 1-Зымдуу Протокол
Блок диаграммасы бул долбоордун аягында эмнени ала тургандыгыбызды көрсөтөт:
1 -кадам: BoM - Билл материалдар
- Raspberry Pi V3 - 32.00 АКШ доллары
- DHT22 Температура жана Салыштырмалуу Нымдуулук Сенсору - USD 9.95
- Резистор 4K7 ом
- DS18B20 суу өткөрбөйт температура сенсор - USD 5.95
- Резистор 4K7 ом
- 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 казыктарына төмөндөгүдөй туташтырыңыз:
- Pin 1 - Vcc ==> 3.3V
- Pin 2 - Маалымат ==> GPIO 16
- Pin 3 - Туташпаңыз
- 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 сенсорунун суу өткөрбөгөн версиясын колдонобуз. Бул нымдуу шарттарда, мисалы, нымдуу жерде алыскы температура үчүн абдан пайдалуу. Сенсор изоляцияланган жана 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 - 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 менен аба ырайы жана бийиктикти өлчөө
Келгиле, 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
7 -кадам: 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ке алыскы маалыматтарды жөнөтүү
Бул кадам үчүн, биз үйрөткүчтө түшүндүрүлгөн ошол эле 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 -кадам: Акыркы эскертүүлөр
Бул үйрөткүчтүн негизги максаты 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
Сунушталууда:
Кесиптик аба ырайы станциясы ESP8266 жана ESP32 DIY колдонуп: 9 кадам (сүрөттөр менен)
ESP8266 жана ESP32 DIY колдонгон профессионалдуу аба ырайы станциясы: LineaMeteoStazione - бул Sensirionдун профессионалдык сенсорлору, ошондой эле кээ бир Davis Instrument компоненттери (Rain Gauge, Anemometer) менен байланышта боло турган толук аба ырайы станциясы
Nextion Display жана Arduino менен DIY аба ырайы станциясы: 11 кадам
Nextion Display жана Arduino менен DIY Weather Station: Бул үйрөткүчтө учурдагы убакытты, температураны жана нымдуулукту көрсөтүү үчүн Nextion дисплейин, rtc1307 убакыт модулун, Arduino UNO жана Visuino колдонобуз
Акыркы 1-2 күндүн ичинде трендди көрүү үчүн Arduino, BME280 жана дисплей менен аба ырайы станциясы: 3 кадам (сүрөттөр менен)
Акыркы 1-2 күндүн ичинде трендди көрүү үчүн Arduino, BME280 жана дисплей менен метеорологиялык станция: Саламатсызбы! Алар учурдагы абанын басымын, температурасын жана нымдуулугун көрсөтөт. Аларга акыркы 1-2 күндүн ичинде курстун презентациясы жетишпеди. Бул процесске ээ болмок
Аба ырайы шамы - Аба ырайы жана температура бир караганда: 8 кадам
Аба ырайы шамы - Аба ырайы жана Температура Бир Караганда: Бул сыйкырдуу шамды колдонуп, сиз учурдагы температураны жана шарттарды дароо сыртта айта аласыз
RPi аба ырайы станциясы жана санариптик саат: 4 кадам (сүрөттөр менен)
RPi Аба ырайы станциясы жана санариптик саат: Бул тез жана оңой жасалуучу проект жана көрсөтүү үчүн жагымдуу дисплей. Бул убакытты, аба ырайын жана температураны көрсөтөт. Эгерде сиз көргөн нерселерди жактырсаңыз, менин жасаган нерселеримди улантуу үчүн Instagram жана Twitterде (@Anders644PI) мени ээрчиңиз