Мазмуну:

AWS IoT менен иштөө MQTTди колдонуучу зымсыз температура сенсору менен: 8 кадам
AWS IoT менен иштөө MQTTди колдонуучу зымсыз температура сенсору менен: 8 кадам

Video: AWS IoT менен иштөө MQTTди колдонуучу зымсыз температура сенсору менен: 8 кадам

Video: AWS IoT менен иштөө MQTTди колдонуучу зымсыз температура сенсору менен: 8 кадам
Video: Глобальные тренды 2020 — от Agile до IoT / Java Tech Talk 2024, Ноябрь
Anonim
AWS IoT менен иштөөнү баштоо MQTTди колдонуучу зымсыз температура сенсору менен
AWS IoT менен иштөөнү баштоо MQTTди колдонуучу зымсыз температура сенсору менен

Мурунку Instructables -де биз Azure, Ubidots, ThingSpeak, Losant сыяктуу ар кандай булут платформаларынан өттүк. Биз MQTT протоколун сенсордук маалыматтарды булутка дээрлик бардык булут платформасында жөнөтүү үчүн колдонуп келе жатабыз. MQTT, HTTP протоколуна караганда анын артыкчылыктары жана артыкчылыктары жөнүндө көбүрөөк маалымат алуу үчүн бул нускамага кайрылсаңыз болот.

Бул көрсөтмөдө биз дагы бир жана эң тааныш булут платформасына Amazon Web Servicesке киребиз. Сиздердин көбүңүз AWS aka Amazon Web Services жана AWS тарабынан берилген булут функциялары менен тааныш болушуңуз мүмкүн. Бул көп жылдар бою вебди өнүктүрүүнүн өзөгү болгон. IoT тиркемелеринин масштабынын өсүшү менен AWS AWSIoT чечимин ойлоп тапты. AWSIoT - бул биздин IoT тиркемелерибизди жайгаштыруу үчүн ишенимдүү чечим.

Бул көрсөтмөнү аткаруу менен:

  • Сиз IoT колдонмоңуз үчүн AWS эсебин орното аласыз
  • Сиз ESP32ди AWS IoT ядросуна туташтыра аласыз
  • MQTT жана HTTP протоколу аркылуу билдирүүлөрдү жөнөтүү жана алуу
  • AWSте жөнөтүлгөн маалыматтарды элестетип көрүңүз

1 -кадам: AWS эсебин орнотуу

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

AWS эсебин орнотуу үчүн бул үйрөткүчтү аткарыңыз.

2 -кадам: Аппараттык жана программалык камсыздоонун өзгөчөлүктөрү

Аппараттык жана программалык камсыздоонун өзгөчөлүктөрү
Аппараттык жана программалык камсыздоонун өзгөчөлүктөрү

Программалык камсыздоонун өзгөчөлүгү

AWS эсеби

Аппараттык мүнөздөмө

  • ESP32
  • Зымсыз температура жана дирилдөө сенсору
  • Zigmo Gateway алуучусу

3 -кадам: Зымсыз титирөө жана температура сенсорлору

Зымсыз титирөө жана температура сенсорлору
Зымсыз титирөө жана температура сенсорлору

Бул Long Range Industrial IoT зымсыз титирөө жана температура сенсору, зымсыз сетка тармагынын архитектурасын колдонуу менен 2 милге чейин мактанат. 16-биттик титирөө жана температура сенсорун камтыган бул сенсор колдонуучу аныктаган аралыкта абдан так титирөө маалыматын өткөрүп берет. Ал төмөнкү өзгөчөлүктөргө ээ:

  • ± 32g диапазону менен өнөр класстын 3-огу Vibration Sensor
  • RMS, MAX жана MIN g Vibration эсептейт
  • Ызы-чууну төмөн өткөрмө чыпканы колдонуу
  • Жыштык диапазону (өткөрүү жөндөмдүүлүгү) 12, 800 Гцке чейин
  • Sample Rate 25, 600Hz чейин
  • 2 миля зымсыз диапазону менен шифрленген байланыш
  • Иштөө температурасынын диапазону -40тан +85 ° Сге чейин
  • Дубалга же Магнитке орнотулган IP65 Rated Enclosure Visual Studio жана LabVIEW үчүн мисал программалык камсыздоо
  • Тышкы зонд тандоосу бар дирилдөө сенсору
  • 4 АА Батареясынан 500, 000ге чейин өткөрүүлөр. Көптөгөн шлюз жана модемдин варианттары бар

4 -кадам: ESP32 AWS жабдыктары

AWSке туташуу жана маалыматтарды жөнөтүүнү баштоо үчүн төмөнкү кадамдарды жасаңыз

  • AWS китепканасын төмөнкү Github репозиторийинен жүктөп алыңыз
  • репо клонун жана AWS_IOT файлын Arduino каталогунун китепкана папкасына коюңуз

git clone

Эми кодду карап көрөлү:

  • Бул колдонмодо, биз WiFi ишеним грамоталарын сактоо жана IP жөндөөлөрү аркылуу учуу үчүн туткундалган порталды колдондук. Туткун порталына толук киришүү үчүн, сиз төмөндөгү көрсөтмөлөрдөн өтсөңүз болот.
  • Туткун порталы бизге Статикалык жана DHCP орнотууларын тандоо мүмкүнчүлүгүн берет. Жөн гана Статикалык IP, Subnet Mask, шлюз жана Wireless Sensor Gateway сыяктуу грамоталарды киргизиңиз, ошол IPде конфигурацияланат.
  • Веб -баракча жайгаштырылган, анда жеткиликтүү WiFi тармактары жана RSSI көрсөтүлгөн тизме бар. WiFi тармагын жана сырсөздү тандап, тапшырууну киргизиңиз. Ишеним грамоталары EEPROMда жана IP жөндөөсү SPIFFSте сакталат. Бул тууралуу көбүрөөк маалыматты бул нускамадан табууга болот.

5 -кадам: Зымсыз титирөө жана температура сенсорунан сенсор маалыматын алуу

Зымсыз титирөө жана температура сенсорунан сенсор маалыматын алуу
Зымсыз титирөө жана температура сенсорунан сенсор маалыматын алуу
Зымсыз титирөө жана температура сенсорунан сенсор маалыматын алуу
Зымсыз титирөө жана температура сенсорунан сенсор маалыматын алуу

Биз Зымсыз Температура жана Дирилдөө Сенсорлорунан 54 байттык кадр алып жатабыз. Бул кадр чыныгы температураны жана дирилдөө маалыматын алуу үчүн башкарылган.

ESP32 сериялык колдонуу үчүн жеткиликтүү үч UART бар

  1. RX0 GPIO 3, TX0 GPIO 1
  2. RX1 GPIO9, TX1 GPIO 10
  3. RX2 GPIO 16, TX2 GPIO 17

жана 3 аппараттык сериялык порттор

  • Сериялык
  • Serial1
  • Serial2

Биринчиден, Hardware Serial баш файлын инициалдаңыз. Бул жерде биз RX2 жана TX2 ака колдонобуз. Сериялык маалыматтарды алуу үчүн ESP32 тактасынын GPIO 16 жана GPIO 17 төөнөгүчтөрү.

#кошуу

# аныктоо RXD2 16 # аныктоо TXD2 17

Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // казыктар 16 rx2, 17 tx2, 19200 bps, 8 бит жок parity 1 stop bit

Кийинки кадамдар сизди чыныгы сенсор баалуулуктарын алууга алып барат

  • Температураны, нымдуулукту, батареяны жана башка сенсордук баалуулуктарды сактоо үчүн өзгөрмөлөрдү түзүңүз
  • Аппараттык серия үчүн Rx, tx pin, baud rate жана parite биттерин коюңуз
  • Биринчиден, Serial1.available () аркылуу окуу үчүн бир нерсе бар экенин текшериңиз.
  • Биз 54 байт кадрды алабыз.
  • 0x7E үчүн баштоо байтын текшериңиз.
  • Дирилдөө маалыматы 3 огу үчүн RMS маанисинен, 3 огу үчүн мин маанилерден, 3 огу үчүн максималдуу маанилерден турат.
  • температура жана батареянын мааниси 2 байтты камтыйт
  • сенсордун атын, түрүн, сенсордук версиясын алуу 1 байтты камтыйт жана аны ошол жерден тиешелүү даректен алса болот

if (Serial2.available ()) {Serial.println ("Сериалды окуу"); маалымат [0] = Serial2.read (); кечигүү (k); if (data [0] == 0x7E) {Serial.println ("Got Packet"); while (! Serial2.available ()); for (i = 1; i <55; i ++) {data = Serial2.read (); кечигүү (1); } if (data [15] == 0x7F) /////// resive data туура экендигин текшерүү үчүн {if (data [22] == 0x08) //////// сенсордун түрүн текшериңиз туура {rms_x = ((uint16_t) (((маалыматтар [24]) << 16) + ((маалыматтар [25]) << 8) + (маалыматтар [26]))/100); rms_y = ((uint16_t) (((маалыматтар [27]) << 16) + ((маалыматтар [28]) << 8) + (маалыматтар [29]))/100); rms_z = ((uint16_t) ((((маалыматтар [30]) << 16) + ((маалыматтар [31]) << 8) + (маалыматтар [32]))/100); int16_t max_x = ((uint16_t) (((маалыматтар [33]) << 16) + ((маалыматтар [34]) << 8) + (маалыматтар [35]))/100); int16_t max_y = (((uint16_t) (((маалыматтар [36]) << 16) + ((маалыматтар [37]) << 8) + (маалыматтар [38]))/100); int16_t max_z = ((uint16_t) ((((маалыматтар [39]) << 16) + ((маалыматтар [40]) << 8) + (маалыматтар [41]))/100);

int16_t min_x = ((uint16_t) ((((маалымат [42]) << 16) + ((маалымат [43]) << 8) + (маалымат [44]))/100); int16_t min_y = ((uint16_t) ((((маалыматтар [45]) << 16) + ((маалыматтар [46]) << 8) + (маалыматтар [47]))/100); int16_t min_z = ((uint16_t) ((((маалыматтар [48]) << 16) + ((маалыматтар [49]) << 8) + (маалыматтар [50]))/100);

cTemp = (((((маалыматтар [51]) * 256) + маалыматтар [52])); калкыма батарея = ((маалымат [18] * 256) + маалымат [19]); чыңалуу = 0.00322 * батарея; Serial.print ("Сенсордун номери"); Serial.println (маалыматтар [16]); senseNumber = маалыматтар [16]; Serial.print ("Сенсор түрү"); Serial.println (маалыматтар [22]); Serial.print ("Камтылган программанын версиясы"); Serial.println (маалыматтар [17]); Serial.print ("Цельсий боюнча температура:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("X огунда RMS термелүүсү:"); Serial.print (rms_x); Serial.println ("мг"); Serial.print ("Y огунда RMS термелүүсү:"); Serial.print (rms_y); Serial.println ("мг"); Serial.print ("Z огунда RMS термелүүсү:"); Serial.print (rms_z); Serial.println ("мг");

Serial.print ("X огунда минималдуу дирилдөө:");

Serial.print (min_x); Serial.println ("мг"); Serial.print ("Y огунда мин титирөө:"); Serial.print (min_y); Serial.println ("мг"); Serial.print ("Z огунда мин титирөө:"); Serial.print (min_z); Serial.println ("мг");

Serial.print ("ADC мааниси:");

Serial.println (батарея); Serial.print ("Батарея чыңалуусу:"); Serial.print (чыңалуу); Serial.println ("\ n"); if (чыңалуу <1) {Serial.println ("Батареяны алмаштыруу убактысы"); }}} else {for (i = 0; i <54; i ++) {Serial.print (data ); Serial.print (","); кечигүү (1); }}}}

6 -кадам: AWSке туташуу

AWSке туташуу
AWSке туташуу
  • AWSIoT хабы менен байланышты орнотуу үчүн AWS_IOT.h, WiFi.h баш файлдарын кошуңуз
  • Саясаттын аты боло турган хост дарегиңизди, кардардын идентификаторун жана нерсенин аты боло турган теманын атын киргизиңиз

// ********* AWS грамоталары ************* // char HOST_ADDRESS = "a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com"; char CLIENT_ID = "ncdGatewayPolicy"; char TOPIC_NAME = "ncdGatewayThing";

JSONду сактоо үчүн char өзгөрмөсүн түзүңүз, бул учурда биз JSONду сактоо үчүн формат түздүк

const char *format = "{" SensorId / ": \"%d / ", \" messageId / ":%d, \" rmsX / ":%d, \" rmsY / ":%d, \" rmsZ / ":%d, \" cTemp / ":%d, \" чыңалуу / ":%. 2f}";

AWS_IOT классынын экземплярын түзүңүз

AWS_IOT esp; // AWS_IOT классынын инстанциясы

Эми AWSIoT хабына төмөнкү ыкманы колдонуу менен туташыңыз

void reconnectMQTT () {if (hornbill.connect (HOST_ADDRESS, CLIENT_ID) == 0) {Serial.println ("AWSке туташкан"); кечигүү (1000);

эгер (0 == hornbill.subscribe (TOPIC_NAME, mySubCallBackHandler))

{Serial.println ("Жазылуу ийгиликтүү"); } else {Serial.println ("Жазылуу ишке ашкан жок, нерсенин атын жана тастыктамаларын текшериңиз"); while (1); }} else {Serial.println ("AWS туташуусу ишке ашкан жок, HOST дарегин текшериңиз"); while (1); }

кечигүү (2000);

}

сенсор маалыматын ар бир 1 мүнөттөн кийин жарыялоо

if (tick> = 60) // темага ар 5секундда жарыялап туруу {tick = 0; заряддык жүк [PAYLOAD_MAX_LEN]; snprintf (жүктөм, PAYLOAD_MAX_LEN, формат, senseNumber, msgCount ++, rms_x, rms_y, rms_z, cTemp, чыңалуу); Serial.println (пайдалуу жүк); if (hornbill.publish (TOPIC_NAME, жүк) == 0) {Serial.print ("Билдирүүнү жарыялоо:"); Serial.println (пайдалуу жүк); } else {Serial.println ("Жарыяланган жок"); }} vTaskDelay (1000 / portTICK_RATE_MS); кене ++;

7 -кадам: AWSте маалыматтарды визуалдаштыруу

AWSте маалыматтарды визуалдаштыруу
AWSте маалыматтарды визуалдаштыруу
AWSте маалыматтарды визуалдаштыруу
AWSте маалыматтарды визуалдаштыруу
AWSте маалыматтарды визуалдаштыруу
AWSте маалыматтарды визуалдаштыруу
  • AWS эсебиңизге кириңиз.
  • инструменттер тилкесинин сол бурчунда сиз Кызматтар өтмөгүн таба аласыз
  • Бул өтмөктү чыкылдатыңыз жана Интернет нерселеринин астында IoT Core тандаңыз.
  • QoSту тандаңыз жана жок. абоненттерге билдирүүлөр. Теманын атын киргизиңиз.

8 -кадам: Жалпы код

Бул кодду Github репозиторийинен таба аласыз.

Кредиттер

  • Ардуино Жсон
  • Зымсыз температура жана нымдуулук сенсорлору
  • ESP32
  • PubSubClient

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