Raspberry Pi Pico Gửi bài đọc BME280 đến ThingSpeak

Raspberry Pi Pico Gửi bài đọc BME280 đến ThingSpeak

Giới thiệu cảm biến BME280

Cảm biến BME280 được sử dụng để đo các chỉ số liên quan đến nhiệt độ môi trường, áp suất khí quyển và độ ẩm tương đối. Nó chủ yếu được sử dụng trong các ứng dụng web và di động, nơi tiêu thụ điện năng thấp là chìa khóa. Cảm biến này sử dụng I2C hoặc SPI để giao tiếp dữ liệu với các bộ điều khiển vi mô. Mặc dù có một số phiên bản BME280 khác nhau có sẵn trên thị trường, nhưng phiên bản chúng tôi sẽ nghiên cứu sử dụng giao thức truyền thông I2C.

Sơ đồ sơ đồ chân BME280

Giao diện Raspberry Pi Pico với BME280 và ESP-01

Raspberry Pi Pico với BME280 và ESP-01

Phần này hướng dẫn cách kết nối Raspberry Pi Pico với cảm biến BME280 và ESP-01.

Chúng tôi sẽ yêu cầu các thành phần sau:

  • Raspberry Pi Pico

  • Cảm biến BME280

  • Mô-đun ESP-01

  • Dây kết nối

  • Breadboard

Raspberry Pi Pico với BME280

Kết nối của BME280 với Raspberry Pi Pico rất đơn giản. Chúng ta phải kết nối thiết bị đầu cuối VCC với 3.3V, nối đất với mặt đất (mặt bằng chung), SCL của cảm biến với SCL của bo mạch và SDA của cảm biến với chân SDA của bo mạch.

Raspberry Pi Pico Chân I2C

Raspberry Pi Pico có hai bộ điều khiển. Cả hai bộ điều khiển I2C đều có thể truy cập thông qua các chân GPIO của Raspberry Pi Pico. Bảng sau đây cho thấy kết nối của các chân GPIO với cả hai bộ điều khiển I2C. Mỗi kết nối của bộ điều khiển có thể được cấu hình thông qua nhiều chân GPIO như trong hình. Nhưng trước khi sử dụng bộ điều khiển I2C, bạn nên định cấu hình trong phần mềm chân GPIO nào bạn muốn sử dụng với bộ điều khiển I2C cụ thể.

Bộ điều khiển I2C

Chân GPIO

I2C0 - SDA

GP0 / GP4 / GP8 / GP12 / GP16 / GP20

I2C0 - SCL

GP1 / GP5 / GP9 / GP13 / GP17 / GP21

I2C1 - SDA

GP2 / GP6 / GP10 / GP14 / GP18 / GP26

I2C1 - SCL

GP3 / GP7 / GP11 / GP15 / GP19 / GP27

BME280 ·

Respberry Pi Pico

VCC

3.3V

SDA

GP2 (I2C1 SDA)

SCL

GP3 (I2C1 SCL)

GND ·

GND ·

Các kết nối giữa hai thiết bị mà chúng tôi đang sử dụng có thể được nhìn thấy bên dưới.

Chúng tôi đã sử dụng các kết nối tương tự như được chỉ định trong bảng trên. Tuy nhiên, bạn cũng có thể sử dụng các kết hợp chân SDA / SCL khác nhưng hãy nhớ thay đổi chúng trong tập lệnh MicroPython.

Raspberry Pi Pico với ESP-01

Mô-đun ESP-01 bao gồm 8 chân. Tuy nhiên, chúng tôi sẽ sử dụng 5 chân để kết nối với bảng Pi Pico. Chúng bao gồm các chân VCC, EN, GND, RX và TX. Các chân RX và TX của mô-đun sẽ được kết nối với các chân UART của bảng Pi Pico. Trước tiên chúng ta hãy xem xét các Chân Raspberry Pi Pi UART.

Chân Raspberry Pi Pico UART

Raspberry Pi Pico chứa hai thiết bị ngoại vi giống hệt nhau với các FIFOs 32×8 Tx và 32×12 Rx riêng biệt.

Chân UART

Chân GPIO

UART0-TX

GP0 / GP12 / GP16

UART0-RX

GP1 / GP13 / GP17

UART1-TX

GP4/GP8

UART1-RX

GP5/GP9

Bảng sau liệt kê các chân GPIO cho cả hai thiết bị ngoại vi UART được tiếp xúc trên sơ đồ chân của bảng phát triển Raspberry Pi Pico.

Đối với hướng dẫn này, chúng tôi sẽ sử dụng chân UART0-TX và RX.

Làm theo sơ đồ kết nối bên dưới để kết nối hai thiết bị.

Raspberry Pi Pico

ESP-01 ·

3.3V

VCC

3.3V

EN

GND ·

GND ·

GP1 (UART0 RX)

TX

GP0 (UART0 TX)

RX

Sơ đồ kết nối Raspberry Pi Pico với BME280 và ESP-01

Chúng tôi đã sử dụng các kết nối tương tự như được đưa ra trong hai bảng trên. Cả ba thiết bị sẽ được nối đất chung và sẽ được cấp nguồn bằng cùng một chân 3.3V của Raspberry Pi Pico.

Sơ đồ dưới đây cho thấy sơ đồ kết nối của Raspberry Pi Pico với BME280 và ESP-01.

Raspberry Pi Pico với sơ đồ kết nối BME280 và ESP-01

Raspberry Pi Pico với sơ đồ kết nối BME280 và ESP-01

Thư viện BME280 MicroPython

Chúng ta sẽ phải cài đặt thư viện BME280 cho MicroPython để tiếp tục với dự án của chúng ta.

Để làm điều đó thành công, hãy mở Thonny IDE của bạn với Raspberry Pi Pico được cắm vào hệ thống của bạn. Đi tới Công cụ > Quản lý gói. Điều này sẽ mở ra Trình quản lý gói Thonny.

Raspberry Pi Pico Cài đặt ssd1306 Thư viện OLED MicoPython 1

Tìm kiếm "bme280" trong thanh tìm kiếm bằng cách nhập tên của nó và nhấp vào nút 'Tìm kiếm trên PyPI.' Từ các kết quả tìm kiếm sau, hãy nhấp vào kết quả được đánh dấu bên dưới: micropython-bme280. Cài đặt thư viện này.

Cài đặt thư viện BME280 Micropython Thonny

Sau một lúc, thư viện này sẽ được cài đặt thành công. Bây giờ chúng tôi đã sẵn sàng để lập trình Raspberry Pi Pico của mình với cảm biến BME280 trong MicroPython.

Chuẩn bị sẵn sàng API ThingSpeak

ThingSpeak là một API mã nguồn mở được sử dụng để lưu trữ hoặc truy xuất dữ liệu bằng giao thức HTTP hoặc MQTT. Điều này diễn ra qua Internet hoặc thông qua mạng LAN. Chúng tôi sẽ sử dụng API này để xuất bản các bài đọc cảm biến từ BME280 được tích hợp với bảng Raspberry Pi Pico của chúng tôi. Trong ThingSpeak, bạn có thể truy cập dữ liệu của mình từ mọi nơi trên thế giới. Bạn có thể hiển thị dữ liệu của mình theo biểu đồ và đồ thị.

Tạo tài khoản

ThingSpeak API được sử dụng miễn phí nhưng chúng ta sẽ phải tạo một Tài khoản MathWorks.
Đầu tiên, hãy truy cập trang web 
Cửa sổ sau sẽ xuất hiện. Nhấp vào nút 'Bắt đầu miễn phí'.

Bây giờ bạn sẽ được chuyển hướng đến cửa sổ tài khoản. Nếu bạn đã có sẵn tài khoản MathWorks, bạn có thể sử dụng tài khoản đó để đăng nhập. Nếu không, bạn sẽ phải tạo một cái mới. Nhấp vào 'Tạo một tài khoản!' để tạo tài khoản MathWorks mới.

Khi bạn đã đăng nhập thành công, bạn sẽ nhận được thông báo sau:
Nhấp vào 'OK'.

Xuất bản lên nhiều trường đọc cảm biến lên ThingSpeak (Nhiệt độ, Độ ẩm và Áp suất)

Chúng tôi sẽ bắt đầu bằng cách tạo một kênh mới cho dự án của chúng tôi. Chuyển đến Kênh > Kênh của tôi. Sau đó nhấp vào 'Kênh mới'.

Bạn sẽ được nhắc đặt tên cho kênh của mình. Chúng tôi sẽ đưa ra một tên, một số mô tả và đánh dấu trường đầu tiên. Trong phần này, chúng tôi sẽ hướng dẫn bạn cách xuất bản nhiều dữ liệu. Bạn có thể sử dụng bất kỳ tên, mô tả và trường nào theo sở thích của mình. Có tổng cộng tám trường mà chúng tôi có thể thêm vào kênh của mình cùng một lúc. Chúng tôi sẽ đánh dấu vào ba trường đầu tiên và thêm tên. Nhấp vào 'Lưu kênh' để tiếp tục.

ThingSpeak tạo kênh mới nhiều trường1

Bây giờ kênh của bạn sẽ được tạo.

ThingSpeak tạo kênh mới nhiều trường2

Chuyển đến chế độ xem riêng tư và nhấp vào biểu tượng bút chì trên đầu mỗi Biểu đồ Trường. Điều này sẽ cho phép chúng tôi tùy chỉnh các biểu đồ theo sở thích của chúng tôi. Bạn có thể thêm chi tiết cho phù hợp. Sau khi bạn nhấn nút Lưu, biểu đồ sẽ được cập nhật về cài đặt bạn vừa đặt.

ThingSpeak tạo kênh mới nhiều trường

Sau đó, chuyển đến tab khóa API và nhấp vào nó. Bây giờ bạn sẽ có thể truy cập khóa API duy nhất của mình. Lưu nó và giữ nó an toàn vì bạn sẽ cần nó sau này trong mã chương trình.

ThingSpeak tạo kênh mới nhiều trường4

Raspberry Pi Pico & ESP-01 ThingSpeak Bản phác thảo MicroPython

Mở Thonny IDE của bạn và đi tới Tệp > Mới để mở tệp mới. Sao chép mã được cung cấp bên dưới trong tệp đó. Bạn chỉ cần thay thế thông tin đăng nhập mạng và khóa API ThingSpeak của mình.

import uos

import machine

import utime

from machine import Pin, I2C        #importing relevant modules & classes

import bme280       #importing BME280 library

 

myHOST = 'api.thingspeak.com'

myPORT = '80'

myAPI = '****************'

 

print()

print("Machine: \t" + uos.uname()[4])

print("MicroPython: \t" + uos.uname()[3])

 

i2c=I2C(1,sda=Pin(2), scl=Pin(3), freq=400000)   #initializing the I2C method 

 

uart0 = machine.UART(0, baudrate=115200)

print(uart0)

 

def Rx_ESP_Data():

    recv=bytes()

    while uart0.any()>0:

        recv+=uart0.read(1)

    res=recv.decode('utf-8')

    return res

def Connect_WiFi(cmd, uart=uart0, timeout=3000):

    print("CMD: " + cmd)

    uart.write(cmd)

    utime.sleep(7.0)

    Wait_ESP_Rsp(uart, timeout)

    print()

 

def Send_AT_Cmd(cmd, uart=uart0, timeout=3000):

    print("CMD: " + cmd)

    uart.write(cmd)

    Wait_ESP_Rsp(uart, timeout)

    print()

    

def Wait_ESP_Rsp(uart=uart0, timeout=3000):

    prvMills = utime.ticks_ms()

    resp = b""

    while (utime.ticks_ms()-prvMills)<timeout:

        if uart.any():

            resp = b"".join([resp, uart.read(1)])

    print("resp:")

    try:

        print(resp.decode())

    except UnicodeError:

        print(resp)

    

Send_AT_Cmd('AT\r\n')          #Test AT startup

Send_AT_Cmd('AT+GMR\r\n')      #Check version information

Send_AT_Cmd('AT+CIPSERVER=0\r\n')      #Check version information

Send_AT_Cmd('AT+RST\r\n')      #Check version information

Send_AT_Cmd('AT+RESTORE\r\n')  #Restore Factory Default Settings

Send_AT_Cmd('AT+CWMODE?\r\n')  #Query the Wi-Fi mode

Send_AT_Cmd('AT+CWMODE=1\r\n') #Set the Wi-Fi mode = Station mode

Send_AT_Cmd('AT+CWMODE?\r\n')  #Query the Wi-Fi mode again

Connect_WiFi('AT+CWJAP="YOUR_SSID","YOUR_PASSWORD"\r\n', timeout=5000) #Connect to AP

Send_AT_Cmd('AT+CIFSR\r\n',timeout=5000)    #Obtain the Local IP Address

Send_AT_Cmd('AT+CIPMUX=1\r\n')    #Obtain the Local IP Address

utime.sleep(1.0)

print ('Starting connection to ESP8266...')

while True:

    bme = bme280.BME280(i2c=i2c)        #BME280 object created

    temperature = bme.values[0]         #reading the value of temperature

    pressure = bme.values[1]            #reading the value of pressure

    humidity = bme.values[2]            #reading the value of humidity

    print('Temperature: ', temperature[:-1])    #printing BME280 values

    print('Humidity: ', humidity[:-1])

    print('Pressure: ', pressure[:-3])

    print ('!About to send data to thingspeak')

    sendData = 'GET /update?api_key='+ myAPI +'&field1='+str(temperature[:-1]) +'&field2='+str(pressure[:-3]) +'&field3='+str(humidity[:-1])

    Send_AT_Cmd('AT+CIPSTART=0,\"TCP\",\"'+ myHOST +'\",'+ myPORT+'\r\n')

    utime.sleep(1.0)

    Send_AT_Cmd('AT+CIPSEND=0,' +str(len(sendData)+4) +'\r\n')

    utime.sleep(1.0)

    Send_AT_Cmd(sendData +'\r\n')

    utime.sleep(4.0)

    Send_AT_Cmd('AT+CIPCLOSE=0'+'\r\n') # once file sent, close connection

    utime.sleep(4.0)

    print ('Data send to thing speak')

Mã hoạt động như thế nào?

Chúng tôi sẽ bắt đầu bằng cách nhập mô-đun máy và mô-đun uos. Chúng tôi cũng sẽ nhập lớp I2C và Pin từ mô-đun máy. Điều này là do chúng tôi phải chỉ định chân cho giao tiếp I2C. Chúng tôi cũng nhập mô-đun utime để chúng tôi có thể thêm độ trễ giữa các lần đọc của chúng tôi. Ngoài ra, hãy nhập thư viện bme280 mà chúng tôi đã cài đặt trước đó.

import uos

import machine

import utime

from machine import Pin, I2C        #importing relevant modules & classes

import bme280       #importing BME280 library

Sau đó, chúng tôi sẽ in thông tin về hệ điều hành hiện tại của chúng tôi trong thiết bị đầu cuối Thonny shell. Chúng tôi sẽ uos.uname() và in phiên bản hệ điều hành và phát hành.

print()

print("Machine: \t" + uos.uname()[4])

print("MicroPython: \t" + uos.uname()[3])

Khởi tạo giao tiếp I2C

Tiếp theo, chúng tôi sẽ khởi tạo các chân I2C GPIO cho SCL và SDA tương ứng. Chúng tôi đã sử dụng chân I2C1 SCL và I2C0 SDA.

Chúng ta đã tạo ra một phương thức I2C() lấy bốn tham số. Tham số đầu tiên là kênh I2C mà chúng ta đang sử dụng. Tham số thứ hai chỉ định chân I2C GPIO của bo mạch được kết nối với đường SDA. Tham số thứ ba chỉ định chân I2C GPIO của bo mạch được kết nối với dòng SCL. Tham số cuối cùng là kết nối tần số.

Chúng tôi đang đặt SCL trên chân 3 và SDA trên chân 2.

i2c=I2C(1,sda=Pin(2), scl=Pin(3), freq=400000)

Khởi tạo giao tiếp UART

Sau đó, chúng ta sẽ tạo một đối tượng uart bằng cách sử dụng UART() và chỉ định kênh UART làm tham số đầu tiên và tốc độ truyền làm tham số thứ hai. Chúng tôi đang sử dụng UART0 trong trường hợp này với tốc độ truyền 115200 cho giao tiếp uart. ESP8266 có tốc độ truyền mặc định là 115200, do đó chúng tôi sẽ sử dụng cùng một tốc độ truyền ở đây cho giao tiếp Raspberry Pi Pico UART để tạo đồng bộ hóa. Hơn nữa, chúng tôi cũng sẽ in các chi tiết UART trong thiết bị đầu cuối vỏ.

uart0 = machine.UART(0, baudrate=115200)

print(uart0)

Ngoài ra, bao gồm máy chủ ThingSpeak, cổng và ghi khóa API để xuất bản thành công các bài đọc lên API. Đảm bảo thay thế khóa API của bạn ở vị trí được chỉ định bởi ''

myHOST = 'api.thingspeak.com'

myPORT = '80'

myAPI = '****************'

Hàm Connect_WiFi() này được sử dụng để kết nối ESP8266 với WiFi.

def Connect_WiFi(cmd, uart=uart0, timeout=3000):

    print("CMD: " + cmd)

    uart.write(cmd)

    utime.sleep(7.0)

    Wait_ESP_Rsp(uart, timeout)

    print()

Tiếp theo, chúng ta sẽ định nghĩa ba hàm. Cái đầu tiên là Rx_ESP_Data(). Điều này đọc dữ liệu nối tiếp đang được nhận. Dữ liệu này được giải mã từ định dạng UTF-8 và được trả về.

def Rx_ESP_Data():

    recv=bytes()

    while uart0.any()>0:

        recv+=uart0.read(1)

    res=recv.decode('utf-8')

    return res

Hàm thứ hai là Send_AT_Cmd(cmd, uart=uart0, timeout=3000). Nó có ba tham số, lệnh AT, kênh UART và thời gian phản hồi. Chức năng này sẽ được sử dụng để nó gửi lệnh AT đến ESP8266 thông qua uart0. Thời gian phản hồi được đặt thành 3 giây.

 

def Send_AT_Cmd(cmd, uart=uart0, timeout=3000):

    print("CMD: " + cmd)

    uart.write(cmd)

    Wait_ESP_Rsp(uart, timeout)

    print()

    

Hàm Wait_ESP_Rsp(uart=uart0, timeout=3000) đợi 3 giây để nhận được phản hồi từ ESP8266. Sau khi nhận được dữ liệu từ ESP8266, nó nối các byte nhận được và in chúng trên thiết bị đầu cuối shell.

def Wait_ESP_Rsp(uart=uart0, timeout=3000):

    prvMills = utime.ticks_ms()

    resp = b""

    while (utime.ticks_ms()-prvMills)<timeout:

        if uart.any():

            resp = b"".join([resp, uart.read(1)])

    print("resp:")

    try:

        print(resp.decode())

    except UnicodeError:

        print(resp)

Lệnh AT

Bây giờ chúng ta hãy xem xét loạt lệnh AT mà chúng ta sẽ gửi qua UART0 đến ESP8266.

Send_AT_Cmd('AT\r\n')          #Test AT startup

Send_AT_Cmd('AT+GMR\r\n')      #Check version information

Send_AT_Cmd('AT+CIPSERVER=0\r\n')      #Check version information

Send_AT_Cmd('AT+RST\r\n')      #Check version information

Send_AT_Cmd('AT+RESTORE\r\n')  #Restore Factory Default Settings

Send_AT_Cmd('AT+CWMODE?\r\n')  #Query the Wi-Fi mode

Send_AT_Cmd('AT+CWMODE=1\r\n') #Set the Wi-Fi mode = Station mode

Send_AT_Cmd('AT+CWMODE?\r\n')  #Query the Wi-Fi mode again

Connect_WiFi('AT+CWJAP="YOUR_SSID","YOUR_PASSWORD"\r\n', timeout=5000) #Connect to AP

Send_AT_Cmd('AT+CIFSR\r\n',timeout=5000)    #Obtain the Local IP Address

Send_AT_Cmd('AT+CIPMUX=1\r\n')    #Obtain the Local IP Address

utime.sleep(1.0)

Send_AT_Cmd('AT+CIPSERVER=1,80\r\n')    #Obtain the Local IP Address

utime.sleep(1.0)

AT: Loại lệnh này được sử dụng để kiểm tra chức năng khởi động của mô-đun WiFi. Phản hồi sẽ ổn, chống lại lệnh này nếu mọi thứ đều ổn.

Send_AT_Cmd('AT\r\n')          #Test AT startup

AT + GMR : Loại lệnh AT này được sử dụng để kiểm tra phiên bản lệnh AT và chúng tôi đã sử dụng phiên bản SDK của lệnh AT trong loại mô-đun WIFI này.

Send_AT_Cmd('AT+GMR\r\n')      #Check version information

AT + CIPSERVER = 0: Điều này cấu hình ESP8266 làm máy chủ và đặt chế độ là 0, có nghĩa là xóa máy chủ (cần phải làm theo bằng cách khởi động lại)

Send_AT_Cmd('AT+CIPSERVER=0\r\n')     

AT + RST: Loại lệnh này được sử dụng để đặt lại mô-đun WiFi khi nó ở trong tình trạng hoạt động. Phản hồi sẽ ổn, khi đặt lại mô-đun.

Send_AT_Cmd('AT+RST\r\n')   

AT + RESTORE: Loại lệnh này được sử dụng để khôi phục cài đặt gốc có nghĩa là, khi lệnh này được nhập thì tất cả các tham số sẽ tự động được đặt lại về mặc định của một người.

Send_AT_Cmd('AT+RESTORE\r\n')  #Restore Factory Default Settings

AT + CWMODE? : Loại lệnh này được sử dụng để truy vấn chế độ WiFi của ESP8266.

Send_AT_Cmd('AT+CWMODE?\r\n')  #Query the WiFi mode

AT + CWMODE = 1 : Điều này đặt chế độ WiFi của ESP8266 trong trường hợp này ở chế độ trạm.

Send_AT_Cmd('AT+CWMODE=1\r\n') #Set the WiFi mode = Station mode

AT + CWJAP = "SSID", "PASSWORD"\r\n', timeout=TIME_ms : Điều này kết nối ESP8266 với một AP có SSID và mật khẩu được cung cấp, Thời gian chờ ở đây là thời gian kết nối lại.

Connect_WiFi('AT+CWJAP="YOUR_SSID","YOUR_PASSWORD"\r\n', timeout=5000) #Connect to AP

AT + CIFSR: Lệnh này lấy địa chỉ IP cục bộ.

Send_AT_Cmd('AT+CIFSR\r\n')

AT + CIPMUX = 1: Lệnh này được sử dụng để kích hoạt nhiều kết nối (tối đa 4)

Send_AT_Cmd('AT+CIPMUX=1\r\n')

AT + CIPSERVER = 1: Lệnh này cấu hình ESP8266 làm máy chủ.

Send_AT_Cmd('AT+CIPSERVER=1,80\r\n')

Nhận các bài đọc cảm biến và xuất bản lên ThingSpeak

Bên trong vòng lặp while, trước tiên chúng ta sẽ tạo ra một đối tượng của bme280 tên là bme và truy cập nhiệt độ, độ ẩm và áp suất thông qua nó. Các chỉ số cảm biến này sẽ được lưu trong các biến tương ứng của chúng: nhiệt độ, độ ẩm và áp suất.

while True:

    bme = bme280.BME280(i2c=i2c)        #BME280 object created

    temperature = bme.values[0]         #reading the value of temperature

    pressure = bme.values[1]            #reading the value of pressure

    humidity = bme.values[2]            #reading the value of humidity

Chúng tôi sẽ in các số đọc cảm biến này mà không có thiết bị trong thiết bị đầu cuối vỏ Thonny.

    print('Temperature: ', temperature[:-1])    #printing BME280 values

    print('Humidity: ', humidity[:-1])

    print('Pressure: ', pressure[:-3])

Cuối cùng, chúng tôi sẽ gửi các bài đọc cảm biến này đến bảng điều khiển ThingSpeak.

print ('!About to send data to thingspeak')

    sendData = 'GET /update?api_key='+ myAPI +'&field1='+str(temperature[:-1]) +'&field2='+str(pressure[:-3]) +'&field3='+str(humidity[:-1])

    Send_AT_Cmd('AT+CIPSTART=0,\"TCP\",\"'+ myHOST +'\",'+ myPORT+'\r\n')

    utime.sleep(1.0)

    Send_AT_Cmd('AT+CIPSEND=0,' +str(len(sendData)+4) +'\r\n')

    utime.sleep(1.0)

    Send_AT_Cmd(sendData +'\r\n')

    utime.sleep(4.0)

    Send_AT_Cmd('AT+CIPCLOSE=0'+'\r\n') # once file sent, close connection

    utime.sleep(4.0)

    print ('Data send to thing speak')

Chúng ta sẽ tạo một biến 'sendData' chứa yêu cầu GET mà chúng ta sẽ thực hiện cho ThingSpeak để cập nhật các trường tương ứng với các giá trị được giữ trong các biến.

sendData = 'GET /update?api_key='+ myAPI +'&field1='+str(temperature[:-1]) +'&field2='+str(pressure[:-3]) +'&field3='+str(humidity[:-1])

Đầu tiên, chúng ta đang viết lệnh AT: AT+CIPSTART=0,\"TCP\",\"'+ myHOST +'\",'+ myPORT+'\r\n' Lệnh này được sử dụng để thiết lập kết nối cổng và địa chỉ của cổng.

Tiếp theo sau độ trễ 1 giây, chúng tôi gửi lệnh AT: AT + CIPSEND = 'ID', 'LENGTH' Điều này sẽ đặt độ dài của dữ liệu sẽ được gửi. Nó cho mô-đun WI-FI biết chúng tôi muốn gửi bao nhiêu byte đến máy chủ.

Sau đó, chúng tôi gửi dữ liệu đến ThingSpeak thông qua để được pusblished đến các trường tương ứng của họ.

Sau đó, chúng tôi sẽ đóng nhiều kết nối khi chúng tôi đang gửi lệnh AT: AT + CIPCLOSE = 'ID'.

    Send_AT_Cmd('AT+CIPSTART=0,\"TCP\",\"'+ myHOST +'\",'+ myPORT+'\r\n')

    utime.sleep(1.0)

    Send_AT_Cmd('AT+CIPSEND=0,' +str(len(sendData)+4) +'\r\n')

    utime.sleep(1.0)

    Send_AT_Cmd(sendData +'\r\n')

    utime.sleep(4.0)

    Send_AT_Cmd('AT+CIPCLOSE=0'+'\r\n') # once file sent, close connection

    utime.sleep(4.0)

    print ('Data send to thing speak')

Demonstration

Sau khi bạn đã tải mã của mình lên bảng Raspberry Pi Pico, hãy chuyển đến thiết bị đầu cuối shell. Trong thiết bị đầu cuối Thonny shell, bạn sẽ có thể xem bo mạch được kết nối. Sau mỗi vài giây, các chỉ số cảm biến BME280 mới sẽ tiếp tục xuất hiện khi chúng được xuất bản lên các trường tương ứng.

Raspberry Pi Pico gửi dữ liệu đến thiết bị đầu cuối shell ThingSpeak

Tiếp theo, mở API ThingSpeak và bạn sẽ có thể thấy các chỉ số nhiệt độ, áp suất và độ ẩm cập nhật trong biểu đồ của mình.

Raspberry Pi Pico gửi dữ liệu đến ThingSpeak

Bài viết cùng chuyên mục

NHANH

NHANH

Vì Đổi mới liên tục nên Nhanh hơn

ĐÚNG

ĐÚNG

Coi trọng và ưu tiên việc làm Đúng

ĐỦ

ĐỦ

Tìm và mua Đủ Đơn hàng hơn

KỊP THỜI

KỊP THỜI

Hiệu suất tối ưu bởi Kịp Thời hơn