Метеорологична станция на IoT с RPi и ESP8266: 10 стъпки
Метеорологична станция на IoT с RPi и ESP8266: 10 стъпки
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 Сензор за температура и относителна влажност - 9,95 USD
  3. Резистор 4K7 ома
  4. DS18B20 Водоустойчив температурен сензор - 5,95 USD
  5. Резистор 4K7 ома
  6. BMP180 Сензор за барометрично налягане, температура и надморска височина - 6,99 щ.д.

Стъпка 2: Инсталиране на сензора за температура и влажност

Инсталиране на сензор за температура и влажност
Инсталиране на сензор за температура и влажност

Първият датчик, който ще бъде инсталиран, ще бъде DHT22 за улавяне на данни за температурата на въздуха и относителната влажност. Сайтът на ADAFRUIT предоставя страхотна информация за тези сензори. По -долу е получена информация оттам:

Общ преглед

Евтините сензори за температура и влажност на DHT са много елементарни и бавни, но са чудесни за любители, които искат да направят малко регистриране на данни. DHT сензорите са направени от две части, капацитивен сензор за влажност и термистор. Вътре има и много основен чип, който прави аналогово -цифрово преобразуване и изплюва цифров сигнал с температурата и влажността. Цифровият сигнал е сравнително лесен за четене с помощта на всеки микроконтролер.

DHT22 Основни характеристики:

  • Ниска цена
  • Захранване от 3 до 5V и I/O
  • Максимално използване на ток 2,5 mA по време на преобразуване (докато се искат данни)
  • Подходящ за 0-100% влажност с точност 2-5%
  • Добър за отчитане на температурата от -40 до 125 ° C ± 0,5 ° C
  • Не повече от 0,5 Hz честота на дискретизация (веднъж на всеки 2 секунди)
  • Размер на тялото 15,1 мм х 25 мм х 7,7 мм
  • 4 пина с 0,1 "разстояние

След като обикновено ще използвате сензора на разстояния по -малки от 20 м, резистор 4K7 ома трябва да бъде свързан между пиновете за данни и VCC. Изводът за изходни данни на DHT22 ще бъде свързан към Raspberry GPIO 16. Проверете горната електрическа схема, свързвайки сензора към RPi пиновете, както е показано по -долу:

  1. ПИН 1 - Vcc ==> 3.3V
  2. Пин 2 - Данни ==> GPIO 16
  3. Пин 3 - Не се свързва
  4. Пин 4 - Gnd ==> Gnd

Не забравяйте да инсталирате резистора 4K7 ом между щифтовете Vcc и Data

След като сензорът е свързан, ние също трябва да инсталираме неговата библиотека на нашия RPi.

Инсталиране на DHT библиотека:

На вашия Raspberry, започвайки от /home, отидете на /Documents

cd документи

Създайте директория за инсталиране на библиотеката и преминете към нея:

mkdir DHT22_Sensor

cd DHT22_Sensor

В браузъра си отидете на Adafruit GitHub:

github.com/adafruit/Adafruit_Python_DHT

Изтеглете библиотеката, като щракнете върху връзката за изтегляне zip вдясно и разархивирайте архива на вашата наскоро създадена папка Raspberry Pi. След това отидете в директорията на библиотеката (подпапка, която се създава автоматично, когато разархивирате файла), и изпълнете командата:

sudo python3 setup.py install

Отворете тестова програма (DHT22_test.py) от моя GITHUB

внос Adafruit_DHT

DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 влажност, температура = Adafruit_DHT. read_retry (DHT22Sensor, DHTpin), ако влажността не е Няма и температурата не е None: print ('Temp = {0: 0.1f}*C Влажност = {1: 0.1 f}%'. формат (температура, влажност)) else: print (' Неуспешно четене. Опитайте отново! ')

Изпълнете програмата с командата:

python3 DHT22_test.py

Екранът за печат по -долу показва резултата.

Образ
Образ

Стъпка 3: Инсталиране на DS18B20 - температурен сензор

Инсталиране на DS18B20 - температурен сензор
Инсталиране на DS18B20 - температурен сензор
Инсталиране на DS18B20 - температурен сензор
Инсталиране на DS18B20 - температурен сензор

Преглед на сензора:

В този урок ще използваме хидроизолирана версия на сензора DS18B20. Той е много полезен за отдалечена температура във влажни условия, например на влажна почва. Сензорът е изолиран и може да прави измервания до 125oC (Adafrut не препоръчва да се използва над 100oC поради кабелната му PVC обвивка).

DS18B20 е цифров сензор, което го прави добър за използване дори на големи разстояния! Тези 1-жични цифрови температурни сензори са доста прецизни (± 0,5 ° C в голяма част от обхвата) и могат да дадат до 12 бита прецизност от вградения цифрово-аналогов преобразувател. Те работят чудесно с NodeMCU, използвайки един цифров пин и дори можете да свържете няколко такива към един и същ пин, всеки от тях има уникален 64-битов идентификатор, изгорен във фабриката, за да ги различава.

Сензорът работи от 3.0 до 5.0V, което означава, че може да се захранва директно от 3.3V, осигурено от един от малиновите щифтове (1 или 17).

Сензорът има 3 проводника:

  • Черно: GND
  • Червено: VCC
  • Жълто: 1-Wire данни

Тук можете да намерите пълните данни: Лист с данни DS18B20

Монтаж на сензора:

Следвайте горната диаграма и направете връзките:

  • Vcc ==> 3.3V
  • Gnd ==> Gnd
  • Данни ==> GPIO 4 (по подразбиране за библиотеката)

Инсталиране на библиотеката на Python:

След това нека инсталираме библиотеката Python, която ще обработва сензора:

sudo pip3 инсталирайте w1thermsensor

Преди да стартирате скрипта за тестване на сензора, проверете дали интерфейсът "1-Wire" е активиран във вашия RPi (вижте горния екран за печат)

Не забравяйте да рестартирате RPi, след като промените конфигурацията му

Тестване на сензора:

За тестване на сензора може да се използва прост скрипт на python:

време за импортиране

от w1thermsensor внос W1ThermSensor ds18b20Sensor = W1ThermSensor () докато True: температура = ds18b20Sensor.get_temperature () печат ("Температурата е % s по Целзий" % температура) time.sleep (1)

Стъпка 4: Инсталиране на BMP180

Инсталиране на BMP180
Инсталиране на BMP180
Инсталиране на BMP180
Инсталиране на BMP180
Инсталиране на BMP180
Инсталиране на BMP180

Преглед на сензора:

BMP180 е наследник на BMP085, ново поколение високо прецизни цифрови сензори за налягане за потребителски приложения. Електрониката с изключително ниска мощност и ниско напрежение на BMP180 е оптимизирана за използване в мобилни телефони, КПК, GPS навигационни устройства и външно оборудване. С шум на ниска надморска височина от само 0,25 м при бързо време за преобразуване, BMP180 предлага превъзходна производителност. Интерфейсът I2C позволява лесна интеграция на системата с микроконтролер. BMP180 се основава на пиезорезистивна технология за EMC здравина, висока точност и линейност, както и дългосрочна стабилност.

Пълният лист с данни за BMP можете да намерите тук: BMP180 - цифров сензор за налягане

Инсталиране на сензора: Следвайте горната диаграма и направете връзките:

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

Активиране на I2C интерфейс

Отидете на RPi Configuration и потвърдете, че I2C интерфейсът е активиран. Ако не, активирайте го и рестартирайте RPi.

Използвайки BMP180

Ако всичко е инсталирано добре и всичко е свързано добре, сега сте готови да включите своя Pi и да започнете да виждате какво 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 install

Отворете вашата Python IDE и създайте тестова програма и я кръстете, например BMP180Test.py

импортирайте Adafruit_BMP. BMP085 като BMP085sensor = BMP085. BMP085 () print ('Temp = {0: 0.2f} *C'.format (sensor.read_temperature ())) print (' Pressure = {0: 0.2f} Pa '. format (sensor.read_pressure ())) print ('Altitude = {0: 0.2f} m'.format (sensor.read_altitude ())) print (' Sealevel Pressure = {0: 0.2f} Pa'.format (sensor.read_sealevel_pressure ()))

Изпълнете тестовата програма:

python3 BMP180Test.py

Горният екран за печат на терминала показва резултата.

Имайте предвид, че това налягане е представено в Pa (паскали). Вижте следващата стъпка, за да разберете по -добре за този уред.

Стъпка 5: Измерване на времето и надморската височина с BMP180

Измерване на времето и надморската височина с BMP180
Измерване на времето и надморската височина с BMP180

Нека отделим време, за да разберем малко повече за това, което ще получим, с показанията на BMP. Можете да пропуснете тази част от урока или да се върнете по -късно.

Ако искате да научите повече за показанията на сензора, моля, отидете на този страхотен урок:

BMP180 е проектиран за точно измерване на атмосферното налягане. Атмосферното налягане варира в зависимост от времето и надморската височина.

Какво е атмосферно налягане?

Определението за атмосферно налягане е сила, която въздухът около вас упражнява върху всичко. Теглото на газовете в атмосферата създава атмосферно налягане. Обща единица за налягане е "паунда на квадратен инч" или psi. Тук ще използваме международната нотация, т.е. нютоните на квадратен метър, които се наричат паскали (Pa).

Ако вземете 1 см широка колона въздух, ще тежи около 1 кг

Това тегло, притискащо отпечатъка на тази колона, създава атмосферното налягане, което можем да измерим със сензори като BMP180. Тъй като въздушната колона с широчина cm тежи около 1 кг, следва, че средното налягане на морското равнище е около 101325 паскала или по -добре 1013.25 hPa (1 hPa е известен също като milibar - mbar). Това ще падне с около 4% на всеки 300 метра изкачване. Колкото по -високо се покачвате, толкова по -малко налягане ще видите, защото колоната до върха на атмосферата е толкова по -къса и следователно тежи по -малко. Това е полезно да се знае, тъй като чрез измерване на налягането и по математика можете да определите височината си.

Въздушното налягане на 3 810 метра е само наполовина от това на морското равнище.

BMP180 извежда абсолютно налягане в паскали (Pa). Един паскал е много малко налягане, приблизително количеството, което лист хартия ще упражни, опирайки се върху маса. По -често ще виждате измервания в хектопаскали (1 hPa = 100 Pa). Библиотеката, използвана тук, извежда стойности с плаваща запетая в hPa, което също се равнява на един милибар (mbar).

Ето някои преобразувания в други единици за налягане:

  • 1 hPa = 100 Pa = 1 mbar = 0.001 bar
  • 1 hPa = 0.75006168 Torr
  • 1 hPa = 0.01450377 psi (паунда на квадратен инч)
  • 1 hPa = 0.02953337 inHg (инчове живак)
  • 1 hpa = 0,00098692 atm (стандартни атмосфери)

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

Тъй като температурата влияе върху плътността на газ и плътността влияе върху масата на газа, а масата влияе върху налягането (уф), атмосферното налягане ще се промени драстично с температурата. Пилотите знаят това като „височина на плътността“, което улеснява излитането в студен ден, отколкото в горещ, тъй като въздухът е по -плътен и има по -голям аеродинамичен ефект. За да компенсира температурата, BMP180 включва доста добър температурен сензор, както и сензор за налягане.

За да извършите отчитане на налягането, първо отчитате температурата, след това комбинирате това с необработеното отчитане на налягането, за да получите окончателно измерване на налягането с компенсация на температурата. (Библиотеката прави всичко това много лесно.)

Измерване на абсолютно налягане

Ако вашето приложение изисква измерване на абсолютно налягане, всичко, което трябва да направите, е да получите отчитане на температурата, след това да извършите отчитане на налягането (вижте примерната скица за подробности). Окончателното отчитане на налягането ще бъде в hPa = mbar. Ако желаете, можете да конвертирате това в друга единица, като използвате горните коефициенти на преобразуване.

Обърнете внимание, че абсолютното налягане на атмосферата ще варира както с височината ви, така и с настоящите метеорологични модели, като и двете са полезни неща за измерване.

Наблюдения за времето

Атмосферното налягане на всяко място на земята (или където и да е с атмосфера) не е постоянно. Сложното взаимодействие между въртенето на земята, наклона на оста и много други фактори водят до движещи се зони с по -високо и по -ниско налягане, което от своя страна причинява вариациите във времето, които виждаме всеки ден. Като следите за промени в налягането, можете да прогнозирате краткосрочни промени във времето. Например спадането на налягането обикновено означава влажно време или наближава буря (навлиза система с ниско налягане). Повишаването на налягането обикновено означава, че наближава ясно време (преминава система с високо налягане). Но не забравяйте, че атмосферното налягане също варира в зависимост от надморската височина. Абсолютното налягане в моята къща, Lo Barnechea в Чили (надморска височина 950 м) винаги ще бъде по -ниско от абсолютното налягане в Сан Франциско например (по -малко от 2 метра, почти морско равнище). Ако метеорологичните станции току-що са докладвали своето абсолютно налягане, би било трудно директно да се сравнят измерванията на налягането от едно място на друго (и мащабните прогнози за времето зависят от измерванията от възможно най-много станции).

За да разрешат този проблем, метеорологичните станции винаги премахват влиянието на височината от отчетените от тях показания за налягане, като математически добавят еквивалентното фиксирано налягане, за да изглежда така, сякаш отчитането е взето на морското равнище. Когато направите това, по -високото четене в Сан Франциско от Lo Barnechea винаги ще бъде поради метеорологичните условия, а не поради надморската височина.

За да направите това, в библиотеката има функция, наречена морско равнище (P, A). Това взема абсолютното налягане (P) в hPa и текущата надморска височина на станцията (A) в метри и премахва ефектите от височината от налягането. Можете да използвате резултата от тази функция, за да сравните директно вашите показания за времето с други станции по света.

Определяне на надморска височина

Тъй като налягането варира в зависимост от надморската височина, можете да използвате сензор за налягане за измерване на височината (с няколко предупреждения). Средното налягане на атмосферата на морското равнище е 1013,25 hPa (или mbar). Това пада до нула, докато се изкачвате към вакуума на космоса. Тъй като кривата на това падане е добре разбрана, можете да изчислите разликата във височината между две измервания на налягането (p и p0), като използвате специфично уравнение.

Ако използвате налягане на морското равнище (1013,25 hPa) като базово налягане (p0), изходът от уравнението ще бъде вашата текуща надморска височина над морското равнище. В библиотеката има функция, наречена височина (P, P0), която ви позволява да получите "изчислената надморска височина".

Горното обяснение е извлечено от урока BMP 180 Sparkfun.

Стъпка 6: Пълният HW

Пълният HW
Пълният HW

Стъпка 7: Изпращане на данни към ThingSpeak

Изпращане на данни към ThingSpeak
Изпращане на данни към ThingSpeak

На този етап научихме как да подготвим RPi за улавяне на данни от всичките 3 сензора, като ги отпечатаме на терминала. Сега е време да видим как да изпратим тези данни до IoT платформата, ThingSpeak.

Нека да започнем!

Първо, трябва да имате акаунт в ThinkSpeak.com

Следвайте инструкциите, за да създадете канал и вземете под внимание идентификатора на канала си и API за запис на ключ

Изтеглете Python Script от моя GitHub: localData ToTS_v1_EXT.py

Нека коментираме най -важните части на кода:

Първо, нека импортираме библиотеката ThingSpeak, дефинираме WiFi клиента и дефинираме вашите локални идентификационни данни за маршрутизатор и Thinkspeak:

импортиране на неща

Има няколко начина за комуникация с ThingSpeak, като най -простият начин би бил използването на клиентската библиотека за API на thingspeak.com, разработен от Mikolaj Chwaliz и Keith Ellis.

Библиотеката може да бъде изтеглена от https://github.com/mchwalisz/thingspeak или да се използва PIP на терминала:

sudo pip3 инсталирайте thingspeak

След това вътре в скрипта актуализирайте идентификационните данни за канала на ThingSpeak

chId = 9999999 # Въведете с вашия идентификатор на канал

tsKey = 'ВЪВЕДЕТЕ С КЛЮЧА ЗА НАПИСВАНЕ НА КАНАЛА' tsUrl = 'https://api.thingspeak.com/update' ts = thingspeak. Channel (chId, tsUrl, tsKey)

Сега, нека инициализираме 3 сензора:

# DS18B20 1-Wire библиотека

от w1thermsensor импортиране W1ThermSensor ds18b20Sensor = W1ThermSensor () # По подразбиране GPIO 4 се използва от библиотеката # DHT22 Библиотека импортиране Adafruit_DHT DHT22Sensor = Adafruit_DHT. DHT22 DHTpin = 16 # BMP180 библиотека импорт Adafruit_BMP0BP0BMP0 Трябва да определите реалната надморска височина, където се намира вашата метеорологична станция, като актуализирате глобалната променлива "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 = кръгла (temp, 1) pres = кръгла (pres/100, 2) # абсолютно налягане в hPa (или mbar) alt=кръг (alt) presSeaLevel = кръг (presSeaLevel/100, 2) # абсолютно налягане в hPa (или mbar) температура на връщане, pres, alt, presSeaLevel

Функцията getLocalData () ще върне всички локални данни, които са уловени от нашата станция:

def getLocalData ():

глобално timeString глобално humLab глобално tempExt глобално tempLab глобално presSL глобално altLab глобално 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 (DHT) и tempDHT не е None: humLab = round (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

Относно комуникационните протоколи

Обърнете внимание, че с помощта на „библиотеката на нещата“се импортира „библиотеката на заявките“, т.е. лицензирана HTTP библиотека на Apache2, написана на Python. Официалната документация за заявка за инсталиране може да бъде намерена тук:

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

Ако е необходимо, преди да стартирате скрипта си, можете да проверите дали библиотеката с заявки е инсталирана:

sudo pip3 заявки за инсталиране

По избор можете да използвате MTTQ като метод за изпращане на данни до ThingSpeak. MQTT е различен от HTTP, веднъж Той е специално проектиран да бъде лек и предназначен за вградени устройства с ниска RAM и производителност на процесора. Също така в повечето случаи MQTT използва по -малка честотна лента.

Вижте този урок: Актуализирайте ThingSpeak канал, използвайки MQTT на Raspberry Pi за повече подробности.

Стъпка 8: Изпращане на отдалечени данни към ThingSpeak с помощта на ESP8266

Изпращане на отдалечени данни към ThingSpeak с помощта на ESP8266
Изпращане на отдалечени данни към ThingSpeak с помощта на ESP8266
Изпращане на отдалечени данни към ThingSpeak с помощта на ESP8266
Изпращане на отдалечени данни към ThingSpeak с помощта на ESP8266

За тази стъпка ще използваме същия HW, който беше обяснен в muy tutorial:

IOT MADE EASY: УЛИЧВАНЕ НА ДАННИ ДАННИ ВРЕМЕ: UV и ВЪЗДУШНА ТЕМПЕРАТУРА И ВЛАЖНОСТ

Кодът, който ще използваме тук, по същество е същият, използван в този урок. Нека коментираме най -важните части на кода:

Първо, нека да извикаме библиотеката ESP8266, да определим WiFi клиента и да определим вашите локални идентификационни данни за маршрутизатор и Thinkspeak:

/ * NodeMCU ESP12-E */

#include 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:

/ * ТАЙМЕР */

#include SimpleTimer таймер;

Трето, по време на setup () ще инициираме серийна комуникация, ще извикаме функцията connectWiFi () и ще определим таймерите. Обърнете внимание, че редът на кода: timer.setInterval (60000L, sendDataTS); ще извиква функцията sendDataTS () на всеки 60 секунди, за да качва данни в канала ThinkSpeak.

void setup ()

{… Serial.begin (115200); забавяне (10); … ConnectWifi (); timer.setInterval (60000L, sendDataTS); …}

И накрая, но не на последно място, по време на цикъла (), единствената необходима команда е да инициира таймера и това е всичко!

void loop ()

{… Timer.run (); // Инициира SimpleTimer}

По -долу можете да видите двете важни функции, използвани за работа с Thinkspeak комуникация:

ESP12-E връзка с вашата WiFi мрежа:

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

*Свързване на 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 Channel ****************************************** ******/ void sendDataTS (void) {if (client.connect (TS_SERVER, 80)) {String postStr = TS_API_KEY; postStr += "& field6 ="; postStr += Низ (temp); postStr += "& field7 ="; postStr += Низ (бръмчене); postStr += "& field8 ="; postStr += String (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 ("Тип съдържание: 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. Нека свържем външна батерия и направим известно измерване под слънцето. Слагам Remote Station на покрива и започвам да записвам данни на ThingSpeak.com, както е показано на снимките по -горе.

Стъпка 9: Заключителни бележки

Заключителни бележки
Заключителни бележки

Основната цел на този урок беше да покаже как да свържете Raspberry Pi към ThingSpeak. Това е чудесно за улавяне на данни и записването им в IoT платформа.

Използвайки възможността, ние също изпратихме данни към този конкретен канал, като ги заснехме от отдалечена станция, използвайки ESP8266. Този подход е ОК, но не е най -добрият. Тъй като имаме "асинхронна" операция, понякога и двете RPi и ESP8266 се опитват да регистрират едновременно (или с малък интервал) опроверганото от ThingSpeak. Идеалният вариант би бил ESP8266 да изпраща данни локално до Raspberry Pi, а последният да отговаря за обработката на всички данни. Правейки това, "Главната гара" (Raspberry Pi), може да направи 3 неща:

  • Регистрирайте всички данни в локална база данни
  • Представете всички данни на локална уеб страница (използвайки Flask, както е показано на горната снимка)
  • Изпращане на всички данни към ThingSpeak едновременно.

В бъдещ урок ще проучим тези опции.

Стъпка 10: Заключение

Заключение
Заключение

Както винаги, надявам се този проект да помогне на другите да намерят своя път във вълнуващия свят на електрониката!

За подробности и окончателен код, моля, посетете моя депозитар на GitHub: RPi-NodeMCU-Weather-Station

За повече проекти, моля, посетете моя блог: MJRoBot.org

Останете на линия! Следващият урок ще изпратим данни от отдалечена метеорологична станция до централна, базирана на уеб сървър на Raspberry Pi:

Поздрави от юга на света!

Ще се видим в следващата ми инструкция!

Благодаря ти, Марсело

Препоръчано: