Mục lục:

IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak: 12 bước
IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak: 12 bước

Video: IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak: 12 bước

Video: IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak: 12 bước
Video: Build an IoT System with ESP32, MQTT & MicroPython (6) 2024, Tháng mười một
Anonim
IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak
IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak

Trong hướng dẫn trước của tôi, MicroPython trên ESP bằng Jupyter, chúng ta đã học cách cài đặt và chạy MicroPython trên thiết bị ESP. Sử dụng Máy tính xách tay Jupyter làm môi trường phát triển của mình, chúng tôi cũng học cách đọc từ các cảm biến (Nhiệt độ, Độ ẩm và Độ sáng), Chúng tôi sử dụng một số phương thức và giao thức truyền thông, Tương tự, Kỹ thuật số, 1-Wire và I2C, cái cuối cùng này để hiển thị dữ liệu trên màn hình OLED.

Bây giờ, trong hướng dẫn sử dụng giao thức MQTT này, chúng ta sẽ lấy tất cả dữ liệu đã thu thập, gửi chúng đến dịch vụ IoT, ThingSpeak.com và đến Ứng dụng di động (Thingsview), nơi chúng ta có thể đăng nhập và phát với dữ liệu.

Đây, sơ đồ khối của dự án của chúng tôi:

Hình ảnh
Hình ảnh

Bước 1: Hội đồng quản trị - Hóa đơn nguyên vật liệu

  1. NodeMCU - 8,39 đô la Mỹ
  2. Cảm biến nhiệt độ và độ ẩm tương đối DHT22 - 9,95 USD
  3. Cảm biến nhiệt độ không thấm nước DS18B20 - USD 5,95
  4. Màn hình OLED SSD1366- USD 8,99 (tùy chọn)
  5. LDR (1x)
  6. Đèn LED (1x) (Tùy chọn)
  7. Nút ấn (1x)
  8. Điện trở 4K7 ohm (2x)
  9. Điện trở 10K ohm (1x)
  10. Điện trở 220 ohm (1x)

Bước 2: Hw

Hw
Hw

Hw mà chúng ta sẽ sử dụng ở đây về cơ bản giống được sử dụng trong hướng dẫn: Micropython trên ESP Sử dụng Jupyter. Tham khảo nó để biết tất cả các kết nối HW.

Ngoại lệ là Servo, chúng tôi sẽ không được sử dụng trong dự án này.

Ở trên, bạn có thể thấy HW đầy đủ. Kết nối các thiết bị như hình minh họa ở đó.

Bước 3: Micropython, REPL, Jupyter

Micropython, REPL, Jupyter
Micropython, REPL, Jupyter
Micropython, REPL, Jupyter
Micropython, REPL, Jupyter

Bạn phải có trình thông dịch Micropython được tải trên thiết bị ESP của mình. Sau khi được tải, bạn nên lập trình ESP của mình bằng bất kỳ cách nào / IDE sẵn có nào có sẵn, chẳng hạn như:

  • TRẢ LỜI
  • Máy tính xách tay Jupyter
  • Mu
  • ESPCut (chỉ dành cho Windows)
  • … Vân vân

Trong hướng dẫn của tôi, Micropython trên ESP Sử dụng Jupyter, tôi đã trình bày chi tiết cách tải xuống và cài đặt trình thông dịch MicroPython, ESPTool để quản lý thiết bị ESP và cách sử dụng Máy tính xách tay Jupyter làm Môi trường phát triển. Hãy thoải mái sử dụng những gì bạn cảm thấy thoải mái hơn.

Tôi thường thực hiện tất cả phát triển trên Máy tính xách tay Jupyter và khi tôi nhận được mã cuối cùng, tôi sao chép chúng vào Geany và tải nó trên ESP của tôi bằng Ampy.

Bước 4: Cảm biến

Cảm biến
Cảm biến

Hãy cài đặt các thư viện, xác định GPIO, tạo các đối tượng, chức năng cho tất cả các cảm biến riêng lẻ:

A. DHT (Nhiệt độ và Độ ẩm)

Hãy cài đặt thư viện DHT và tạo một đối tượng:

từ dht nhập khẩu DHT22

từ máy nhập Pin dht22 = DHT22 (Pin (12))

Bây giờ, hãy tạo một hàm để đọc cảm biến DHT:

def readDht ():

dht22.measure () trả về dht22.tempether (), dht22.humidity () Kiểm tra chức năng DHT

print (readDht ())

Kết quả sẽ là ví dụ:

(17.7, 43.4)

B. DS18B20 (Nhiệt độ bên ngoài)

Hãy Cài đặt các thư viện và tạo một đối tượng:

nhập onewire, ds18x20

thời gian nhập # Xác định chân nào thiết bị 1 dây sẽ được kết nối ==> chân 2 (D4) dat = Pin (2) # tạo đối tượng onewire ds = ds18x20. DS18X20 (onewire. OneWire (dat)) Quét các thiết bị trên bu

cảm biến = ds.scan ()

print ('các thiết bị được tìm thấy:', cảm biến)

Kết quả in ra không thực sự quan trọng, thứ chúng ta sẽ cần là cảm biến được phát hiện đầu tiên: cảm biến [0]. Và bây giờ, chúng ta có thể xây dựng một chức năng để đọc dữ liệu cảm biến:

def readDs ():

ds.convert_temp () time.sleep_ms (750) trả về ds.read_temp (cảm biến [0])

Luôn luôn quan trọng để kiểm tra cảm biến bằng cách sử dụng chức năng đã tạo

print (readDs ()) Nếu bạn nhận được giá trị nhiệt độ, mã của bạn là chính xác

17.5

C. LDR (Độ sáng)

LDR sẽ sử dụng chân analog của ESP của chúng tôi (nó chỉ là một trong trường hợp của ESP8266 và một số đến ESP32).

Tham khảo hướng dẫn ESP32 của tôi để biết chi tiết.

Giống như đã làm trước đây:

# nhập thư viện

từ nhập máy ADC # Xác định đối tượng adc = ADC (0) Một hàm đơn giản: adc.read () có thể được sử dụng để đọc giá trị ADC. Nhưng hãy nhớ rằng bộ ADC bên trong sẽ chuyển đổi điện áp từ 0 đến 3,3V trong các giá trị kỹ thuật số tương ứng, thay đổi từ 0 đến 1023. Khi chúng tôi quan tâm đến "Độ sáng", chúng tôi sẽ coi ánh sáng tối đa là giá trị thu được tối đa từ cảm biến (trong trường hợp 900) và ánh sáng tối thiểu mà trong trường hợp của tôi là 40. Với những giá trị đó, chúng ta có thể "ánh xạ" giá trị từ 40 đến 900 trong 0 đến 100% độ sáng. Vì vậy, chúng tôi sẽ tạo một hàm mới

def readLdr ():

lumPerct = (adc.read () - 40) * (10/86) # chuyển đổi theo tỷ lệ phần trăm ("bản đồ") vòng quay trở lại (lumPerct)

Bạn nên kiểm tra chức năng bằng cách sử dụng print (readLDR ()). Kết quả phải là một số nguyên từ o đến 100.

D. Nút nhấn (Đầu vào kỹ thuật số)

Ở đây chúng tôi đang sử dụng Nút nhấn làm cảm biến kỹ thuật số, nhưng nó có thể là "tiếng vọng" của thiết bị truyền động (Ví dụ: một máy bơm đã được BẬT / TẮT).

# xác định chân 13 làm đầu vào và kích hoạt điện trở Kéo lên bên trong:

button = Pin (13, Pin. IN, Pin. PULL_UP) # Hàm đọc trạng thái nút: def readBut (): return button.value ()

Bạn có thể kiểm tra nút đọc chức năng in (readBut ()). Nhấn W / o thì kết quả sẽ là "1". Nhấn nút, kết quả sẽ là "0"

Bước 5: Chụp và hiển thị cục bộ tất cả dữ liệu cảm biến

Thu thập và hiển thị cục bộ tất cả dữ liệu cảm biến
Thu thập và hiển thị cục bộ tất cả dữ liệu cảm biến

Bây giờ chúng ta đã tạo một chức năng cho mỗi cảm biến, hãy tạo chức năng cuối cùng sẽ đọc tất cả chúng cùng một lúc:

def colectData ():

temp, hum, = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () return temp, hum, extTemp, lum, butSts Bây giờ nếu bạn sử dụng

in (colectData ())

Sẽ dẫn đến một bộ dữ liệu bao gồm tất cả dữ liệu được thu thập từ các cảm biến:

(17.4, 45.2, 17.3125, 103, 1)

Chúng tôi cũng có thể tùy chọn, hiển thị những dữ liệu đó trên màn hình cục bộ:

# nhập thư viện và tạo đối tượng i2c

từ nhập máy I2C i2c = I2C (scl = Pin (5), sda = Pin (4)) # nhập thư viện và tạo đối tượng oled import ssd1306 i2c = I2C (scl = Pin (5), sda = Pin (4)) oled = ssd1306. SSD1306_I2C (128, 64, i2c, 0x3c) # create a function: def displayData (temp, hum, extTemp, lum, butSts): oled.fill (0) oled.text ("Temp:" + str (temp) + "oC", 0, 4) oled.text ("Hum:" + str (hum) + "%", 0, 16) oled.text ("ExtTemp:" + str (extTemp) + "oC", 0, 29) oled.text ("Lumin:" + str (lum) + "%", 0, 43) oled.text ("Nút:" + str (butSts), 0, 57) oled.show () # hiển thị dữ liệu bằng cách sử dụng chức năng displayData (temp, hum, extTemp, lum, butSts)

Như một tùy chọn, tôi cũng sẽ bao gồm đèn LED BẬT khi chúng tôi bắt đầu đọc các cảm biến, sẽ TẮT sau khi dữ liệu đó được hiển thị. Làm điều này sẽ giúp xác nhận rằng chương trình đang hoạt động khi chúng tôi ngắt kết nối ESP khỏi PC và chạy tự động.

Vì vậy, chức năng chính sẽ là:

# Chức năng chính để đọc tất cả các cảm biến

def main (): # hiển thị dữ liệu với một hàm led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off ()

Vì vậy, thực hiện main (), chúng ta sẽ nhận được dữ liệu cảm biến hiển thị trên OLED như trong hình.

Bước 6: Chạy mã trạm cục bộ khi khởi động ESP

Chạy mã trạm cục bộ khi khởi động ESP
Chạy mã trạm cục bộ khi khởi động ESP

Chúng tôi có thể có tất cả những gì đã được phát triển cho đến nay trên một tệp duy nhất để được thực thi bởi ESP của chúng tôi.

Hãy mở bất kỳ trình soạn thảo văn bản nào và dán tất cả mã vào đó:

# nhập thư viện chung

từ nhập máy Thời gian nhập pin # xác định chân 0 làm đèn led đầu ra = Pin (0, Pin. OUT) # DHT từ nhập dht DHT22 dht22 = DHT22 (Pin (12)) # Hàm đọc định nghĩa DHT readDht (): dht22.measure () return dht22.tempether (), dht22.humidity () # DS18B20 import onewire, ds18x20 # Xác định pin nào của thiết bị 1 dây sẽ được kết nối ==> pin 2 (D4) dat = Pin (2) # Tạo onewire object ds = ds18x20. DS18X20 (onewire. OneWire (dat)) # quét các thiết bị trên bus sensor = ds.scan () # function để đọc DS18B20 def readDs (): ds.convert_temp () time.sleep_ms (750) return round (ds.read_temp (cảm biến [0]), 1) # LDR từ máy nhập ADC # Xác định đối tượng adc = ADC (0) # chức năng đọc độ sáng def readLdr (): lumPerct = (adc.read () - 40) * (10/86) # chuyển đổi theo tỷ lệ phần trăm ("bản đồ") vòng quay lại (lumPerct) # xác định chân 13 làm đầu vào và kích hoạt điện trở kéo lên bên trong: button = Pin (13, Pin. IN, Pin. PULL_UP) # Hàm đọc trạng thái nút: def readBut (): return button.value () # Hàm đọc tất cả dữ liệu: def cole ctData (): temp, hum, = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () return temp, hum, extTemp, lum, butSts # nhập thư viện và tạo đối tượng i2c từ máy nhập I2C i2c = I2C (scl = Pin (5), sda = Pin (4)) # nhập thư viện và tạo đối tượng oled import ssd1306 i2c = I2C (scl = Pin (5), sda = Pin (4)) oled = ssd1306. SSD1306_I2C (128, 64, i2c, 0x3c) # tạo một hàm: def displayData (temp, hum, extTemp, lum, butSts): oled.fill (0) oled.text ("Temp:" + str (temp) + "oC", 0, 4) oled.text ("Hum:" + str (hum) + "%", 0, 16) oled.text ("ExtTemp:" + str (extTemp) + "oC", 0, 29) oled. text ("Lumin:" + str (lum) + "%", 0, 43) oled.text ("Nút:" + str (butSts), 0, 57) oled.show () # Chức năng chính để đọc tất cả các cảm biến def main (): # hiển thị dữ liệu với hàm led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () '' '- ----- chạy chức năng chính -------- '' 'main ()

Lưu nó, ví dụ như localData.py.

Để chạy mã này trực tiếp trên thiết bị đầu cuối của bạn, bạn sẽ cần Ampy.

Đầu tiên, trên Terminal, hãy thông báo cho Ampy cổng Serial của chúng tôi:

xuất AMPY_PORT = / dev / tty. SLAB_USBtoUART

Bây giờ, chúng ta có thể thấy các tệp bên trong thư mục gốc ESP của chúng ta:

ampy ls

Như một phản hồi, chúng tôi sẽ nhận được boot.py, đó là tệp đầu tiên sẽ chạy trong hệ thống.

Bây giờ, hãy sử dụng Ampy để tải tập lệnh python LocalData.py của chúng tôi dưới dạng /main.py, vì vậy tập lệnh sẽ chạy ngay sau khi khởi động:

ampy đặt localData.py / main / py

Nếu chúng ta sử dụng lệnh amp ls bây giờ, bạn sẽ thấy 2 tệp bên trong ESP.: boot.py và main.py

Đặt lại ESP của bạn, sẽ làm cho chương trình localData.py chạy tự động, hiển thị dữ liệu cảm biến trên màn hình.

Màn hình in Terminal ở trên hiển thị những gì chúng ta đã làm.

Với đoạn mã trên, màn hình sẽ chỉ được hiển thị một lần, nhưng chúng ta có thể xác định một vòng lặp trên hàm main (), sẽ hiển thị dữ liệu trên mọi khoảng thời gian xác định (PUB_TIME_SEC) và ví dụ, cho đến khi chúng ta nhấn nút:

# vòng lặp nhận dữ liệu cho đến khi nhấn nút

while button.value (): led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () time.sleep (PUB_TIME_SEC)

Biến PUB_TIME_SEC phải được khai báo vào thời điểm bạn muốn mẫu của mình.

Để nâng cao thêm mã của chúng tôi, rất vui được thông báo rằng chúng tôi sẽ đi ra khỏi vòng lặp, vì chúng tôi sẽ xác định 2 chức năng chung mới, một chức năng để xóa màn hình và một chức năng khác để nhấp nháy đèn LED vào một số lần nhất định.

# Hiển thị rõ ràng:

def displayClear (): oled.fill (0) oled.show () # tạo hàm nhấp nháy def flashLed (num): for i in range (0, num): led.on () sleep (0.5) led.off () ngủ (0,5)

Vì vậy, bây giờ chúng ta có thể viết lại hàm main () của chúng ta:

trong khi button.value ():

led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () time.sleep (PUB_TIME_SEC) flashLed (3) displayClear ()

Mã cuối cùng có thể được tải xuống từ GitHub: localData.py của tôi và cũng như Sổ tay Jupyter được sử dụng để phát triển mã đầy đủ: Phát triển dữ liệu cục bộ Jupyter.

Bước 7: Kết nối ESP với WiFi cục bộ

Kết nối ESP với WiFi cục bộ
Kết nối ESP với WiFi cục bộ

Mô-đun mạng được sử dụng để định cấu hình kết nối WiFi. Có hai giao diện WiFi, một cho trạm (khi ESP8266 kết nối với bộ định tuyến) và một cho điểm truy cập (cho các thiết bị khác kết nối với ESP8266). Tại đây, ESP của chúng tôi sẽ được kết nối với mạng cục bộ. Hãy gọi thư viện và xác định thông tin đăng nhập mạng của chúng ta:

nhập mạng

WiFi_SSID = "SSID CỦA BẠN" WiFi_PASS = "MẬT KHẨU CỦA BẠN"

Chức năng dưới đây có thể được sử dụng để kết nối ESP với mạng cục bộ của bạn:

def do_connect ():

wlan = network. WLAN (network. STA_IF) wlan.active (True) if not wlan.isconnected (): print ('connect to network…') wlan.connect (WiFi_SSID, WiFi_SSID) while not wlan.isconnected (): pass print ('cấu hình mạng:', wlan.ifconfig ())

Khi chạy hàm, bạn có thể nhận được kết quả là địa chỉ IP:

do_connect ()

Kết quả sẽ là:

cấu hình mạng: ('10.0.1.2 ',' 255.255.255.0 ', '10.0.1.1', '10.0.1.1 ')

Trong trường hợp của tôi, 10.0.1.2, là địa chỉ IP của ESP.

Bước 8: The ThingSpeak

The ThingSpeak
The ThingSpeak

Tại thời điểm này, chúng tôi đã học cách thu thập dữ liệu từ tất cả các cảm biến, hiển thị chúng trên màn hình OLED của chúng tôi. Bây giờ, đã đến lúc xem cách gửi những dữ liệu đó đến một nền tảng IoT, ThingSpeak.

Hãy bắt đầu nào!

Đầu tiên, bạn phải có một tài khoản tại ThinkSpeak.com. Tiếp theo, hãy làm theo hướng dẫn để tạo Kênh và ghi lại ID kênh và Ghi khóa API của bạn.

Ở trên, bạn có thể thấy 5 trường sẽ được sử dụng trên Kênh của chúng tôi.

Bước 9: Giao thức MQTT và kết nối ThingSpeak

Giao thức MQTT và Kết nối ThingSpeak
Giao thức MQTT và Kết nối ThingSpeak

MQTT là một kiến trúc xuất bản / đăng ký được phát triển chủ yếu để kết nối băng thông và các thiết bị hạn chế năng lượng qua mạng không dây. Nó là một giao thức đơn giản và nhẹ, chạy qua các ổ cắm TCP / IP hoặc WebSockets. MQTT qua WebSockets có thể được bảo mật bằng SSL. Kiến trúc xuất bản / đăng ký cho phép thông báo được đẩy đến các thiết bị khách mà thiết bị không cần liên tục thăm dò ý kiến của máy chủ.

Nhà môi giới MQTT là đầu mối giao tiếp trung tâm và có nhiệm vụ gửi tất cả các thông điệp giữa người gửi và người nhận hợp pháp. Máy khách là bất kỳ thiết bị nào kết nối với nhà môi giới và có thể xuất bản hoặc đăng ký các chủ đề để truy cập thông tin. Một chủ đề chứa thông tin định tuyến cho nhà môi giới. Mỗi khách hàng muốn gửi tin nhắn sẽ xuất bản chúng theo một chủ đề nhất định và mỗi khách hàng muốn nhận tin nhắn đăng ký một chủ đề nhất định. Nhà môi giới gửi tất cả các thông điệp với chủ đề phù hợp cho các khách hàng thích hợp.

ThingSpeak ™ có nhà môi giới MQTT tại URL mqtt.thingspeak.com và cổng 1883. Nhà môi giới ThingSpeak hỗ trợ cả xuất bản MQTT và đăng ký MQTT.

Trong trường hợp của chúng tôi, chúng tôi sẽ sử dụng: MQTT Publish

Hình ảnh
Hình ảnh

Hình mô tả cấu trúc chủ đề. Khóa API Viết là bắt buộc để xuất bản. Nhà môi giới xác nhận một yêu cầu CONNECT chính xác với CONNACK.

Giao thức MQTT được hỗ trợ trong thư viện tích hợp sẵn trong nhị phân Micropython - giao thức này có thể được sử dụng để gửi dữ liệu từ ESP8266 của bạn, qua WIFI, tới cơ sở dữ liệu đám mây miễn phí.

Hãy sử dụng thư viện umqtt.simple:

từ umqtt.simple nhập MQTTClient

Và khi biết ID máy chủ của chúng tôi, có thể tạo đối tượng khách MQTT của chúng tôi:

SERVER = "mqtt.thingspeak.com"

client = MQTTClient ("umqtt_client", SERVER)

Bây giờ, có thông tin đăng nhập ThingSpeak của bạn:

CHANNEL_ID = "ID KÊNH CỦA BẠN"

WRITE_API_KEY = "CHÌA KHÓA CỦA BẠN Ở ĐÂY"

Hãy tạo "Chủ đề" MQTT của chúng tôi:

chủ đề = "kênh /" + CHANNEL_ID + "/ xuất bản /" + WRITE_API_KEY

Hãy để dữ liệu của chúng tôi được gửi đến ThingSpeak IoT Service, sử dụng hàm đã tạo và liên kết phản hồi của nó với các biến dữ liệu cụ thể:

temp, hum, extTemp, lum, butSts = colectData ()

Với những biến đó được cập nhật, chúng tôi có thể tạo "MQTT Payload" của mình:

payload = "field1 =" + str (temp) + "& field2 =" + str (hum) + "& field3 =" + str (extTemp) + "& field4 =" + str (lum) + "& field5 =" + str (butSts)

Và đó là nó! Chúng tôi đã sẵn sàng gửi dữ liệu tới ThinsSpeak, chỉ cần sử dụng 3 dòng mã dưới đây:

client.connect ()

client.publish (chủ đề, tải trọng) client.disconnect ()

Bây giờ, nếu bạn truy cập trang kênh của mình (như của tôi ở trên), bạn sẽ thấy rằng mỗi một trong 5 trường sẽ có dữ liệu liên quan đến cảm biến của bạn.

Bước 10: Bộ ghi dữ liệu cảm biến

Bộ ghi dữ liệu cảm biến
Bộ ghi dữ liệu cảm biến

Bây giờ, chúng ta biết rằng chỉ với một vài dòng mã là có thể tải dữ liệu lên dịch vụ IoT, hãy tạo một hàm vòng lặp để thực hiện nó tự động trong một khoảng thời gian đều đặn (tương tự như những gì chúng ta đã làm với "Dữ liệu cục bộ ").

Sử dụng cùng một biến (PUB_TIME_SEC), được khai báo trước đó, một chức năng chính đơn giản để liên tục thu thập dữ liệu, ghi lại chúng trên kênh của chúng tôi sẽ là:

trong khi Đúng:

temp, hum, extTemp, lum, butSts = colectData () payload = "field1 =" + str (temp) + "& field2 =" + str (hum) + "& field3 =" + str (extTemp) + "& field4 =" + str (lum) + "& field5 =" + str (butSts) client.connect () client.publish (topic, payload) client.disconnect () time.sleep (PUB_TIME_SEC)

Lưu ý rằng chỉ "tải trọng" phải được cập nhật, khi "chủ đề" có liên quan đến thông tin đăng nhập kênh của chúng tôi và sẽ không thay đổi.

Tìm kiếm trang kênh ThingSpeak của bạn, bạn sẽ thấy rằng dữ liệu sẽ được tải liên tục cho mỗi trường. Bạn có thể che LDR, đặt tay lên cảm biến nhiệt độ / tiếng ồn, nhấn nút, v.v. và xem cách kênh sẽ tự động "ghi nhật ký" những dữ liệu đó để phân tích trong tương lai.

Thông thường, đối với Ghi dữ liệu, chúng ta nên cố gắng sử dụng ít điện năng nhất có thể, vì vậy, chúng ta sẽ không sử dụng đèn LED hoặc màn hình cục bộ. Ngoài ra, thông thường với các thiết bị ESP, hãy đặt chúng vào trạng thái "ngủ sâu", nơi bộ vi xử lý sẽ ở trạng thái năng lượng tối thiểu cho đến khi đến thời điểm thu thập dữ liệu và gửi chúng đến nền tảng IoT.

Tuy nhiên, khi ý tưởng đã được học ở đây, chúng ta hãy bao gồm cả màn hình và đèn LED như chúng ta đã làm trước đây. Làm điều đó, chức năng "ghi nhật ký" của chúng tôi sẽ là:

trong khi button.value ():

led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () temp, hum, extTemp, lum, butSts = colectData () payload = "field1 =" + str (temp) + "& field2 =" + str (hum) + "& field3 =" + str (extTemp) + "& field4 =" + str (lum) + "& field5 =" + str (butSts) client.connect () client.publish (topic, payload) client.disconnect () time.sleep (PUB_TIME_SEC) flashLed (3) displayClear ()

Bạn có thể tìm thấy tập lệnh microPython hoàn chỉnh tại đây: dataLoggerTS_EXT.py và sổ ghi chép Jupyter đã được sử dụng để phát triển cũng có thể được tìm thấy tại đây: IoT ThingSpeak Data Logger EXT.ipynb.

Để tải lên tập lệnh trên ESP, trên thiết bị đầu cuối của bạn, hãy sử dụng lệnh:

ampy đưa dataLoggerTS.py /main.py

Và nhấn nút ESP - reset. Bạn sẽ có dữ liệu thu thập ESP và ghi lại chúng trên ThingSpeak.com cho đến khi nhấn giữ dưới cùng (đợi đèn LED nhấp nháy 3 lần và màn hình OLED tắt).

Bước 11: Ứng dụng ThingView

Ứng dụng ThingView
Ứng dụng ThingView

Dữ liệu đã ghi có thể được xem trực tiếp trên trang ThingSpeak.com hoặc thông qua APP, chẳng hạn như ThingsView!

ThingView là một ỨNG DỤNG do CINETICA phát triển, cho phép bạn trực quan hóa các kênh ThingSpeak của mình một cách dễ dàng, chỉ cần nhập ID kênh và bạn đã sẵn sàng.

Đối với các kênh công khai, ứng dụng sẽ tôn trọng cài đặt cửa sổ của bạn: màu sắc, tỷ lệ thời gian, loại biểu đồ và số lượng kết quả. Phiên bản hiện tại hỗ trợ biểu đồ đường và cột, biểu đồ spline được hiển thị dưới dạng biểu đồ đường.

Đối với các kênh riêng tư, dữ liệu sẽ được hiển thị bằng cách sử dụng cài đặt mặc định, vì không có cách nào để đọc cài đặt cửa sổ riêng tư chỉ bằng khóa API.

Ứng dụng ThingView có thể được tải xuống cho ANDROID và IPHONE.

Bước 12: Kết luận

Phần kết luận
Phần kết luận

Như mọi khi, tôi hy vọng dự án này có thể giúp những người khác tìm đường vào thế giới điện tử đầy thú vị!

Để biết chi tiết và mã cuối cùng, vui lòng truy cập kho lưu ký GitHub của tôi: IoT_TS_MQTT

Để biết thêm các dự án khác, vui lòng truy cập blog của tôi: MJRoBot.org

Saludos từ phía nam của thế giới!

Hẹn gặp bạn trong hướng dẫn tiếp theo của tôi!

Cảm ơn bạn, Marcelo

Đề xuất: