สารบัญ:

เริ่มต้นใช้งาน AWS IoT ด้วยเซ็นเซอร์อุณหภูมิแบบไร้สายโดยใช้ MQTT: 8 ขั้นตอน
เริ่มต้นใช้งาน AWS IoT ด้วยเซ็นเซอร์อุณหภูมิแบบไร้สายโดยใช้ MQTT: 8 ขั้นตอน

วีดีโอ: เริ่มต้นใช้งาน AWS IoT ด้วยเซ็นเซอร์อุณหภูมิแบบไร้สายโดยใช้ MQTT: 8 ขั้นตอน

วีดีโอ: เริ่มต้นใช้งาน AWS IoT ด้วยเซ็นเซอร์อุณหภูมิแบบไร้สายโดยใช้ MQTT: 8 ขั้นตอน
วีดีโอ: Home Assistant 2023 (EP.5) DIY อุปกรณ์ IoT ด้วย Tasmota พร้อมติดตั้ง MQTT Broker 2024, พฤศจิกายน
Anonim
เริ่มต้นใช้งาน AWS IoT ด้วยเซ็นเซอร์อุณหภูมิแบบไร้สายโดยใช้ MQTT
เริ่มต้นใช้งาน AWS IoT ด้วยเซ็นเซอร์อุณหภูมิแบบไร้สายโดยใช้ MQTT

ใน Instructables ก่อนหน้านี้ เราได้ผ่านแพลตฟอร์มคลาวด์ต่างๆ เช่น Azure, Ubidots, ThingSpeak, Losant เป็นต้น เราใช้โปรโตคอล MQTT เพื่อส่งข้อมูลเซ็นเซอร์ไปยังคลาวด์ในแพลตฟอร์มคลาวด์เกือบทั้งหมด สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ MQTT ข้อดีและประโยชน์ของโปรโตคอล HTTP คุณสามารถอ้างถึงคำแนะนำนี้ได้

ในคำแนะนำนี้ เราจะขยายไปยังอีกแพลตฟอร์มคลาวด์ที่คุ้นเคยอย่าง Amazon Web Services หลายท่านอาจคุ้นเคยกับ AWS หรือที่เรียกว่า Amazon Web Services และฟังก์ชันระบบคลาวด์ที่ AWS จัดหาให้ เป็นแกนหลักของการพัฒนาเว็บมาหลายปีแล้ว ด้วยขนาดของแอปพลิเคชัน IoT ที่เพิ่มขึ้น AWS ได้คิดค้นโซลูชันของ AWSIoT AWSIoT เป็นโซลูชันที่เชื่อถือได้สำหรับการโฮสต์แอปพลิเคชัน IoT ของเรา

โดยทำตามคำแนะนำนี้:

  • คุณจะสามารถตั้งค่าบัญชี AWS สำหรับแอปพลิเคชัน IoT ของคุณได้
  • คุณจะสามารถเชื่อมต่อ ESP32 กับ AWS IoT core
  • ส่งและรับข้อความโดยใช้โปรโตคอล MQTT และ
  • เห็นภาพข้อมูลที่ส่งใน AWS

ขั้นตอนที่ 1: การตั้งค่าบัญชี AWS

การตั้งค่าบัญชี AWS นั้นค่อนข้างง่าย คุณเพียงแค่ต้องอัปโหลดใบรับรองสองสามฉบับ แนบนโยบายกับมัน ลงทะเบียนอุปกรณ์ และเริ่มรับข้อความข้อมูลเซ็นเซอร์ใน AWS

ในการตั้งค่าบัญชี AWS ให้ทำตามบทช่วยสอนนี้

ขั้นตอนที่ 2: ข้อมูลจำเพาะของฮาร์ดแวร์และซอฟต์แวร์

ข้อมูลจำเพาะของฮาร์ดแวร์และซอฟต์แวร์
ข้อมูลจำเพาะของฮาร์ดแวร์และซอฟต์แวร์

ข้อกำหนดซอฟต์แวร์

บัญชี AWS

ข้อกำหนดฮาร์ดแวร์

  • ESP32
  • เซ็นเซอร์อุณหภูมิและการสั่นสะเทือนแบบไร้สาย
  • ตัวรับ Zigmo Gateway

ขั้นตอนที่ 3: เซนเซอร์ตรวจจับการสั่นสะเทือนและอุณหภูมิแบบไร้สาย

เซนเซอร์ตรวจจับการสั่นสะเทือนและอุณหภูมิแบบไร้สาย
เซนเซอร์ตรวจจับการสั่นสะเทือนและอุณหภูมิแบบไร้สาย

นี่คือเซ็นเซอร์ตรวจจับอุณหภูมิและการสั่นสะเทือนไร้สาย IoT อุตสาหกรรมระยะไกล ระยะสูงสุด 2 ไมล์โดยใช้สถาปัตยกรรมเครือข่ายตาข่ายไร้สาย ด้วยการรวมเซ็นเซอร์การสั่นสะเทือนและอุณหภูมิ 16 บิต เซ็นเซอร์นี้จะส่งข้อมูลการสั่นที่แม่นยำสูงตามช่วงเวลาที่ผู้ใช้กำหนด มีคุณสมบัติดังต่อไปนี้:

  • เซ็นเซอร์สั่นสะเทือน 3 แกนระดับอุตสาหกรรมพร้อมช่วง ±32g
  • คำนวณ RMS, MAX และ MIN g Vibration
  • การกำจัดสัญญาณรบกวนโดยใช้ Low-pass Filter
  • ช่วงความถี่ (แบนด์วิดท์) สูงสุด 12, 800 Hz
  • อัตราตัวอย่างสูงสุด 25, 600Hz
  • การสื่อสารที่เข้ารหัสด้วยช่วงไร้สาย 2 ไมล์
  • ช่วงอุณหภูมิในการทำงาน -40 ถึง +85 °C
  • ซอฟต์แวร์ตัวอย่างตู้ติดผนังหรือแบบแม่เหล็กติดตั้งด้วยมาตรฐาน IP65 สำหรับ Visual Studio และ LabVIEW
  • เซ็นเซอร์สั่นสะเทือนพร้อมตัวเลือกโพรบภายนอก
  • มากถึง 500,000 การส่งสัญญาณจากแบตเตอรี่ AA 4 ก้อนมีตัวเลือกเกตเวย์และโมเด็มมากมาย

ขั้นตอนที่ 4: ESP32 AWS Firmware

หากต้องการเชื่อมต่อกับ AWS และเริ่มส่งข้อมูล ให้ทำตามขั้นตอนต่อไปนี้

  • ดาวน์โหลดไลบรารี AWS จากที่เก็บ Github ต่อไปนี้
  • โคลน repo และวางไฟล์ AWS_IOT ไปยังโฟลเดอร์ไลบรารีของไดเรกทอรี Arduino

โคลน git

ทีนี้มาดูรหัสกัน:

  • ในแอปพลิเคชันนี้ เราได้ใช้แคปทีฟพอร์ทัลเพื่อบันทึกข้อมูลรับรอง WiFi และเลื่อนผ่านการตั้งค่า IP สำหรับคำแนะนำโดยละเอียดเกี่ยวกับแคปทีฟพอร์ทัล คุณสามารถอ่านคำแนะนำต่อไปนี้
  • พอร์ทัลแบบ Captive ช่วยให้เราเลือกระหว่างการตั้งค่าแบบคงที่และ 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 พอร์ต Serial

  • ซีเรียล
  • Serial1
  • Serial2

ขั้นแรก เริ่มต้นไฟล์ส่วนหัว Hardware Serial ที่นี่เราจะใช้ RX2 และ TX2 aka GPIO 16 และ GPIO 17 พินของบอร์ด ESP32 เพื่อรับข้อมูลอนุกรม

#รวม

# กำหนด RXD2 16 # กำหนด TXD2 17

Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // พิน 16 rx2, 17 tx2, 19200 bps, 8 บิตไม่มีความเท่าเทียมกัน 1 บิตหยุด

ขั้นตอนต่อไปนี้จะนำคุณไปสู่การรับค่าเซ็นเซอร์ที่แท้จริง

  • สร้างตัวแปรสำหรับเก็บอุณหภูมิ ความชื้น แบตเตอรี่ และค่าเซ็นเซอร์อื่นๆ
  • ตั้งค่า Rx, tx pin, baud rate และ parity bits สำหรับฮาร์ดแวร์ซีเรียล
  • ก่อนอื่น ให้ตรวจสอบว่ามีอะไรให้อ่านโดยใช้ Serial1.available()
  • เราจะได้เฟรม 54 ไบต์
  • ตรวจสอบ 0x7E ซึ่งเป็นไบต์เริ่มต้น
  • ข้อมูลการสั่นสะเทือนประกอบด้วยค่า RMS สำหรับ 3 แกน ค่าต่ำสุดสำหรับ 3 แกน ค่าสูงสุดสำหรับ 3 แกน
  • อุณหภูมิและค่าแบตเตอรี่จะมีข้อมูล 2 ไบต์
  • รับชื่อเซ็นเซอร์ ชนิด เวอร์ชันของเซ็นเซอร์จะมีข้อมูล 1 ไบต์และสามารถรับได้จากที่อยู่ตามลำดับ

ถ้า (Serial2.available ()) { Serial.println ("อ่าน Serial"); data[0] = Serial2.read(); ล่าช้า (k); if(data[0]==0x7E) { Serial.println("มีแพ็คเก็ต"); ในขณะที่ (!Serial2.available()); สำหรับ (i = 1; i< 55; i++) { data = Serial2.read(); ล่าช้า(1); } if(data[15]==0x7F) /////// เพื่อตรวจสอบว่าข้อมูลที่ได้รับนั้นถูกต้องหรือไม่ { if(data[22]==0x08) //////// ตรวจสอบให้แน่ใจว่าประเภทเซ็นเซอร์ ถูกต้อง { rms_x = ((uint16_t)(((data[24])<<16) + ((data[25])<<8) + (data[26]))/100); rms_y = ((uint16_t)(((data[27])<<16) + ((data[28])<<8) + (data[29]))/100); rms_z = ((uint16_t)(((data[30])<<16) + ((data[31])<<8) + (data[32]))/100); int16_t max_x = ((uint16_t)(((data[33])<<16) + ((data[34])<<8) + (data[35]))/100); int16_t max_y = ((uint16_t)(((data[36])<<16) + ((data[37])<<8) + (data[38]))/100); int16_t max_z = ((uint16_t)(((data[39])<<16) + ((data[40])<<8) + (data[41]))/100);

int16_t min_x = ((uint16_t)(((data[42])<<16) + ((data[43])<<8) + (data[44]))/100); int16_t min_y = ((uint16_t)(((data[45])<<16) + ((data[46])<<8) + (data[47]))/100); int16_t min_z = ((uint16_t)(((data[48])<<16) + ((data[49])<<8) + (data[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("การสั่น RMS ในแกน X:"); Serial.print(rms_x); Serial.println(" มก."); Serial.print("การสั่น RMS ในแกน Y:"); Serial.print(rms_y); Serial.println(" มก."); Serial.print("การสั่น RMS ในแกน Z:"); 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"); ถ้า (แรงดันไฟฟ้า < 1) { Serial.println ("ถึงเวลาเปลี่ยนแบตเตอรี่"); } } } else { สำหรับ (i = 0; i< 54; i++) { Serial.print(data); Serial.print(", "); ล่าช้า(1); } } } }

ขั้นตอนที่ 6: การเชื่อมต่อกับ AWS

กำลังเชื่อมต่อกับ AWS
กำลังเชื่อมต่อกับ AWS
  • รวมไฟล์ส่วนหัว AWS_IOT.h, WiFi.h เพื่อตั้งค่าการเชื่อมต่อกับฮับ AWSIoT
  • ป้อนที่อยู่โฮสต์ รหัสลูกค้า ซึ่งจะเป็นชื่อนโยบาย และชื่อหัวข้อซึ่งจะเป็นชื่อสิ่งของ

//*********AWS Credentials*************//char HOST_ADDRESS="a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com"; ถ่าน CLIENT_ID= "ncdGatewayPolicy"; ถ่าน TOPIC_NAME= "ncdGatewayThing";

สร้างตัวแปร char เพื่อเก็บ JSON ของคุณ ในกรณีนี้ เราได้สร้างรูปแบบเพื่อจัดเก็บ JSON

const char *format = "{"SensorId\":\"%d\", \"messageId\":%d, \"rmsX\":%d, \"rmsY\":%d, \"rmsZ" \":%d, \"cTemp\":%d, \"แรงดันไฟฟ้า\":%.2f}";

สร้างอินสแตนซ์ของคลาส AWS_IOT

AWS_IOT พิเศษ; //อินสแตนซ์ของคลาส AWS_IOT

ตอนนี้เชื่อมต่อกับฮับ AWSIoT โดยใช้วิธีการต่อไปนี้

ถือเป็นโมฆะ reconnectMQTT(){ if(hornbill.connect(HOST_ADDRESS, CLIENT_ID)== 0) { Serial.println("Connected to AWS"); ล่าช้า (1000);

if(0==hornbill.subscribe(TOPIC_NAME, mySubCallBackHandler))

{ Serial.println("สมัครสมาชิกสำเร็จ"); } อื่น { Serial.println ("การสมัครล้มเหลว ตรวจสอบชื่อสิ่งของและใบรับรอง"); ในขณะที่(1); } } อื่น { Serial.println ("การเชื่อมต่อ AWS ล้มเหลว ตรวจสอบที่อยู่โฮสต์"); ในขณะที่(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, payload) == 0) { Serial.print("เผยแพร่ข้อความ:"); Serial.println (เพย์โหลด); } อื่น ๆ { Serial.println ("การเผยแพร่ล้มเหลว"); } } vTaskDelay (1000 / พอร์ต TICK_RATE_MS); ติ๊ก++;

ขั้นตอนที่ 7: การแสดงข้อมูลใน AWS

การแสดงข้อมูลใน AWS
การแสดงข้อมูลใน AWS
การแสดงข้อมูลใน AWS
การแสดงข้อมูลใน AWS
การแสดงข้อมูลใน AWS
การแสดงข้อมูลใน AWS
  • เข้าสู่ระบบบัญชี AWS ของคุณ
  • ที่มุมซ้ายของแถบเครื่องมือ คุณจะพบแท็บบริการ
  • คลิกที่แท็บนี้และภายใต้หัวข้อ Internet of Things ให้เลือก IoT Core
  • เลือก QoS และหมายเลข ของข้อความถึงสมาชิก ป้อนชื่อหัวข้อ

ขั้นตอนที่ 8: รหัสโดยรวม

คุณสามารถค้นหาโค้ดโดยรวมได้บน Github Repository นี้

เครดิต

  • Arduino Json
  • เซ็นเซอร์อุณหภูมิและความชื้นแบบไร้สาย
  • ESP32
  • PubSubClient

แนะนำ: