Mục lục:

Bắt đầu với AWS IoT với cảm biến nhiệt độ không dây sử dụng MQTT: 8 bước
Bắt đầu với AWS IoT với cảm biến nhiệt độ không dây sử dụng MQTT: 8 bước

Video: Bắt đầu với AWS IoT với cảm biến nhiệt độ không dây sử dụng MQTT: 8 bước

Video: Bắt đầu với AWS IoT với cảm biến nhiệt độ không dây sử dụng MQTT: 8 bước
Video: Giới thiệu về IoT siêu dễ hiểu. Học và làm việc trong ngành IoT ra sao? 2024, Tháng mười một
Anonim
Bắt đầu với AWS IoT với cảm biến nhiệt độ không dây sử dụng MQTT
Bắt đầu với AWS IoT với cảm biến nhiệt độ không dây sử dụng MQTT

Trong các phiên bản trước, chúng tôi đã trải qua các nền tảng đám mây khác nhau như Azure, Ubidots, ThingSpeak, Losant, v.v. Chúng tôi đã sử dụng giao thức MQTT để gửi dữ liệu cảm biến lên đám mây trong hầu hết các nền tảng đám mây. Để biết thêm thông tin về MQTT, những ưu điểm và lợi ích của nó so với giao thức HTTP, bạn có thể tham khảo hướng dẫn này.

Trong hướng dẫn này, chúng tôi sẽ phóng to thêm một nền tảng đám mây khác và quen thuộc nhất là Amazon Web Services. Nhiều người trong số các bạn có thể đã quen thuộc với AWS hay còn gọi là Amazon Web Services và chức năng đám mây do AWS cung cấp. Nó đã là cốt lõi của sự phát triển web trong nhiều năm. Với quy mô ngày càng tăng của các ứng dụng IoT, AWS đã đưa ra giải pháp AWSIoT. AWSIoT là một giải pháp đáng tin cậy để lưu trữ các ứng dụng IoT của chúng tôi.

Bằng cách làm theo hướng dẫn này:

  • Bạn sẽ có thể thiết lập tài khoản AWS cho ứng dụng IoT của mình
  • Bạn sẽ có thể kết nối ESP32 với lõi AWS IoT
  • Gửi và nhận tin nhắn bằng giao thức MQTT và
  • Trực quan hóa dữ liệu đã gửi trong AWS

Bước 1: Thiết lập tài khoản AWS

Thiết lập tài khoản AWS khá dễ dàng. Bạn chỉ cần tải lên một vài chứng chỉ, đính kèm các chính sách với nó, Đăng ký thiết bị và bắt đầu nhận thông báo dữ liệu cảm biến trong AWS.

Để thiết lập tài khoản AWS, hãy làm theo hướng dẫn này.

Bước 2: Thông số kỹ thuật phần cứng và phần mềm

Thông số kỹ thuật phần cứng và phần mềm
Thông số kỹ thuật phần cứng và phần mềm

Đặc điểm kỹ thuật phần mềm

Tài khoản AWS

Đặc điểm kỹ thuật phần cứng

  • ESP32
  • Cảm biến nhiệt độ và rung không dây
  • Bộ thu Zigmo Gateway

Bước 3: Cảm biến nhiệt độ và rung không dây

Cảm biến nhiệt độ và rung không dây
Cảm biến nhiệt độ và rung không dây

Đây là cảm biến nhiệt độ và rung không dây IoT công nghiệp tầm xa, tự hào với phạm vi lên đến 2 dặm bằng cách sử dụng kiến trúc mạng lưới không dây. Kết hợp cảm biến Rung và Nhiệt độ 16 bit, cảm biến này truyền dữ liệu rung động có độ chính xác cao trong các khoảng thời gian do người dùng xác định. Nó có các tính năng sau:

  • Cảm biến rung 3 trục cấp công nghiệp với phạm vi ± 32g
  • Tính RMS, MAX và MIN g Rung
  • Loại bỏ tiếng ồn bằng Bộ lọc thông thấp
  • Dải tần số (Băng thông) lên đến 12, 800 Hz
  • Tốc độ lấy mẫu lên đến 25, 600Hz
  • Giao tiếp được mã hóa với phạm vi không dây 2 dặm
  • Phạm vi nhiệt độ hoạt động -40 đến +85 ° C
  • Vỏ bọc được xếp hạng IP65 gắn trên tường hoặc gắn nam châmPhần mềm mẫu cho Visual Studio và LabVIEW
  • Cảm biến rung với tùy chọn đầu dò bên ngoài
  • Lên đến 500, 000 lần truyền từ 4 pin AA

Bước 4: Phần mềm chương trình ESP32 AWS

Để kết nối với AWS và bắt đầu gửi dữ liệu, hãy thực hiện theo các bước sau

  • Tải xuống thư viện AWS từ kho Github sau
  • sao chép repo và đặt tệp AWS_IOT vào thư mục thư viện của thư mục Arduino

git clone

Bây giờ chúng ta hãy xem qua đoạn mã:

  • Trong ứng dụng này, chúng tôi đã sử dụng cổng cố định để lưu thông tin đăng nhập WiFi và di chuột qua cài đặt IP. Để biết phần giới thiệu chi tiết về cổng bị khóa, bạn có thể xem qua hướng dẫn sau.
  • Cổng bị khóa cung cấp cho chúng tôi tùy chọn để chọn giữa cài đặt Tĩnh và DHCP. Chỉ cần nhập thông tin đăng nhập như IP tĩnh, Mặt nạ mạng con, cổng vào và Cổng cảm biến không dây sẽ được định cấu hình trên IP đó.
  • Một trang web đang được lưu trữ trong đó danh sách hiển thị các mạng WiFi khả dụng và có RSSI. Chọn mạng và mật khẩu WiFi và nhập gửi. Thông tin đăng nhập sẽ được lưu trong EEPROM và cài đặt IP sẽ được lưu trong SPIFFS. Nhiều hơn về điều này có thể được tìm thấy trong hướng dẫn này.

Bước 5: Lấy dữ liệu cảm biến từ cảm biến nhiệt độ và rung không dây

Lấy dữ liệu cảm biến từ cảm biến nhiệt độ và rung không dây
Lấy dữ liệu cảm biến từ cảm biến nhiệt độ và rung không dây
Lấy dữ liệu cảm biến từ cảm biến nhiệt độ và rung không dây
Lấy dữ liệu cảm biến từ cảm biến nhiệt độ và rung không dây

Chúng tôi đang nhận được khung 54 byte từ Cảm biến nhiệt độ và độ rung không dây. Khung này được thao tác để lấy dữ liệu về nhiệt độ và độ rung thực tế.

ESP32 có sẵn ba UART để sử dụng Nối tiếp

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

và 3 cổng nối tiếp phần cứng

  • Nối tiếp
  • Serial1
  • Serial2

Đầu tiên, khởi tạo tệp tiêu đề Phần cứng Serial. Ở đây chúng tôi sẽ sử dụng RX2 và TX2 aka. Các chân GPIO 16 và GPIO 17 của bo mạch ESP32 để lấy dữ liệu nối tiếp.

#bao gồm

# xác định RXD2 16 # xác định TXD2 17

Serial2.begin (115200, SERIAL_8N1, RXD2, TXD2); // chân 16 rx2, 17 tx2, 19200 bps, 8 bit không chẵn lẻ 1 bit dừng

Các bước sau sẽ dẫn bạn đi xa hơn để có được các giá trị cảm biến thực

  • Tạo các biến để lưu trữ nhiệt độ, độ ẩm, pin và các giá trị cảm biến khác
  • Đặt chân Rx, tx, tốc độ truyền và bit chẵn lẻ cho nối tiếp phần cứng
  • Đầu tiên, hãy kiểm tra xem có thứ gì để đọc bằng Serial1.available ()
  • Chúng ta sẽ nhận được khung là 54 byte.
  • Kiểm tra 0x7E là byte bắt đầu.
  • Dữ liệu rung bao gồm giá trị RMS cho 3 trục, giá trị nhỏ nhất cho 3 trục, giá trị lớn nhất cho 3 trục.
  • nhiệt độ và giá trị pin sẽ chứa 2 byte dữ liệu
  • lấy tên, loại cảm biến, phiên bản cảm biến sẽ chứa 1 byte dữ liệu và có thể lấy từ đó địa chỉ tương ứng

if (Serial2.available ()) {Serial.println ("Đọc nối tiếp"); data [0] = Serial2.read (); độ trễ (k); if (data [0] == 0x7E) {Serial.println ("Có gói tin"); while (! serial2.available ()); for (i = 1; i <55; i ++) {data = Serial2.read (); trì hoãn (1); } if (data [15] == 0x7F) /////// để kiểm tra xem dữ liệu nhận có đúng không {if (data [22] == 0x08) //////// đảm bảo loại cảm biến là đúng {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) (((dữ liệu [30]) << 16) + ((dữ liệu [31]) << 8) + (dữ liệu [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 = (((((dữ liệu [51]) * 256) + dữ liệu [52])); float pin = ((data [18] * 256) + data [19]); điện áp = 0,00322 * pin; Serial.print ("Số cảm biến"); Serial.println (data [16]); senseNumber = data [16]; Serial.print ("Loại cảm biến"); Serial.println (dữ liệu [22]); Serial.print ("Phiên bản chương trình cơ sở"); Serial.println (dữ liệu [17]); Serial.print ("Nhiệt độ tính bằng độ C:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("RMS rung trong trục X:"); Serial.print (rms_x); Serial.println ("mg"); Serial.print ("RMS rung theo trục Y:"); Serial.print (rms_y); Serial.println ("mg"); Serial.print ("RMS rung theo trục Z:"); Serial.print (rms_z); Serial.println ("mg");

Serial.print ("Dao động tối thiểu theo trục X:");

Serial.print (min_x); Serial.println ("mg"); Serial.print ("Dao động tối thiểu theo trục Y:"); Serial.print (min_y); Serial.println ("mg"); Serial.print ("Dao động tối thiểu theo trục Z:"); Serial.print (min_z); Serial.println ("mg");

Serial.print ("Giá trị ADC:");

Serial.println (pin); Serial.print ("Điện áp Pin:"); Serial.print (điện áp); Serial.println ("\ n"); if (điện áp <1) {Serial.println ("Thời gian Thay Pin"); }}} else {for (i = 0; i <54; i ++) {Serial.print (data ); Serial.print (","); trì hoãn (1); }}}}

Bước 6: Kết nối với AWS

Kết nối với AWS
Kết nối với AWS
  • Bao gồm các tệp tiêu đề AWS_IOT.h, WiFi.h để thiết lập kết nối với trung tâm AWSIoT
  • Nhập Địa chỉ máy chủ của bạn, Id khách hàng sẽ là tên chính sách và tên chủ đề sẽ là tên thứ

// ********* Thông tin đăng nhập AWS ************* // char HOST_ADDRESS = "a2smbp7clzm5uw-ats.iot.us-east-1.amazonaws.com"; char CLIENT_ID = "ncdGatewayPolicy"; char TOPIC_NAME = "ncdGatewayThing";

Tạo một biến char để lưu trữ JSON của bạn, trong trường hợp này, chúng tôi đã tạo một định dạng để lưu trữ JSON

const char * format = "{" SensorId / ": \"% d / ", \" messageId / ":% d, \" rmsX / ":% d, \" rmsY / ":% d, \" rmsZ / ":% d, \" cTemp / ":% d, / "tage \":%. 2f} ";

Tạo một phiên bản của lớp AWS_IOT

AWS_IOT esp; // Phiên bản của lớp AWS_IOT

Bây giờ kết nối với trung tâm AWSIoT bằng phương pháp sau

void renectMQTT () {if (hornbill.connect (HOST_ADDRESS, CLIENT_ID) == 0) {Serial.println ("Đã kết nối với AWS"); chậm trễ (1000);

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

{Serial.println ("Đăng ký Thành công"); } else {Serial.println ("Đăng ký Không thành công, Kiểm tra Tên Điều và Chứng chỉ"); trong khi (1); }} else {Serial.println ("Kết nối AWS không thành công, Kiểm tra Địa chỉ HOST"); trong khi (1); }

chậm trễ (2000);

}

công bố dữ liệu cảm biến sau mỗi 1 phút

if (tick> = 60) // xuất bản lên chủ đề sau mỗi 5 giây {tick = 0; tải trọng char [PAYLOAD_MAX_LEN]; snprintf (tải trọng, PAYLOAD_MAX_LEN, định dạng, senseNumber, msgCount ++, rms_x, rms_y, rms_z, cTemp, điện áp); Serial.println (tải trọng); if (hornbill.publish (TOPIC_NAME, payload) == 0) {Serial.print ("Xuất bản Thông báo:"); Serial.println (tải trọng); } else {Serial.println ("Xuất bản không thành công"); }} vTaskDelay (1000 / portTICK_RATE_MS); đánh dấu ++;

Bước 7: Trực quan hóa dữ liệu trong AWS

Trực quan hóa dữ liệu trong AWS
Trực quan hóa dữ liệu trong AWS
Trực quan hóa dữ liệu trong AWS
Trực quan hóa dữ liệu trong AWS
Trực quan hóa dữ liệu trong AWS
Trực quan hóa dữ liệu trong AWS
  • Đăng nhập vào tài khoản AWS của bạn.
  • trên góc trái của thanh công cụ, bạn sẽ tìm thấy tab Dịch vụ
  • Nhấp vào tab này và trong tiêu đề Internet of Things, chọn IoT Core.
  • Chọn QoS và không. tin nhắn cho người đăng ký. Nhập tên chủ đề.

Bước 8: Mã tổng thể

Bạn có thể tìm thấy mã tổng thể trên Kho lưu trữ Github này.

Tín dụng

  • Arduino Json
  • Cảm biến nhiệt độ và độ ẩm không dây
  • ESP32
  • PubSubClient

Đề xuất: