I want to read the temperature data from the DHT11 sensor connected to
the Pico using RS485 between Raspberry Pi 4 and Raspberry Pi Pico. I use
the following code for this, but when I use it like this, I can send
data from Raspberry Pi without any problems. However, when I send data
from Raspberry Pi Pico, if I assume the temperature is 25, sometimes I
can read this value from Raspberry Pi and sometimes I can't. I tried to
adjust the correct time with Time.sleep() but I couldn't succeed. How
can I solve this?
Raspberry Pi Code
1 | import serial
|
2 | import time
|
3 |
|
4 | RS485 = serial.Serial('/dev/serial0', baudrate=9600, timeout=1)
|
5 |
|
6 |
|
7 | def send_data(data):
|
8 | ser = serial.Serial('/dev/serial0', baudrate=9600, timeout=1)
|
9 | ser.write(data.encode())
|
10 | print("data sent")
|
11 |
|
12 |
|
13 | temperature = 0
|
14 | while True:
|
15 | data_to_send = "xtemperature"
|
16 | time.sleep(1)
|
17 | send_data(data_to_send)
|
18 | time.sleep(1)
|
19 |
|
20 | while True:
|
21 |
|
22 | received_data = RS485.readline().rstrip()
|
23 | received_data = received_data.decode('utf-8')
|
24 | print(received_data)
|
25 | time.sleep(1)
|
26 | received_value = int(received_data)
|
27 | if 0 <= received_value <= 70:
|
28 | temperature=received_value
|
29 | break
|
30 |
|
31 | break
|
32 | print("TEMPERATURE : ",temperature)
|
Raspberry Pi Pico Code
1 | from machine import Pin
|
2 |
|
3 | import time
|
4 | from dht import DHT11
|
5 |
|
6 | uart_tx = machine.Pin(4) # TX pin: GPIO 0
|
7 | uart_rx = machine.Pin(5) # RX pin: GPIO 1
|
8 |
|
9 |
|
10 | uart = machine.UART(1, baudrate=9600, tx=uart_tx, rx=uart_rx)
|
11 |
|
12 |
|
13 |
|
14 | def response():
|
15 | received_data = uart.read()
|
16 | try:
|
17 | received_string = received_data.decode('utf-8').strip()
|
18 | print("DATA :")
|
19 | print(received_string)
|
20 | if received_string:
|
21 | if received_string[0] == 'x':
|
22 | pin = Pin(15,Pin.IN,Pin.PULL_UP)
|
23 | d = DHT11(Pin(15))
|
24 | d.measure()
|
25 | T = d.temperature()
|
26 | x=0
|
27 | while x<150:
|
28 | x=x+1
|
29 | T=d.temperature()
|
30 | send_data = str(T)
|
31 | data = (send_data + "\r\n")
|
32 | time.sleep(1)
|
33 | uart.write(data.encode('utf-8'))
|
34 | print("data sent")
|
35 | print(data)
|
36 |
|
37 | return received_string
|
38 |
|
39 | except UnicodeError:
|
40 | pass
|
41 | return ""
|
42 |
|
43 |
|
44 | while True:
|
45 | if uart.any():
|
46 | incoming_data = response()
|
47 | print(incoming_data)
|