通过套接字发送传感器数据

sending sensor data over a socket

我想把dht11的温湿度数据从raspberrypi传到pc

但是当我运行这个代码时:

import RPi.GPIO as GPIO
import dht11
import time
import datetime
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)
instance = dht11.DHT11(pin=18)

import socket

HOST = '192.168.35.129'

PORT = 9999        
 
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

server_socket.bind((HOST, PORT))

server_socket.listen()

client_socket, addr = server_socket.accept()


print('Connected by', addr)


try:
        while True:
                result = instance.read()
                if result.is_valid():
                        print("Last valid input: " + str(datetime.datetime.now()))
                        print("Temperature: %-3.1f C" % result.temperature)
                        print("Humidity: %-3.1f %%" % result.humidity)
                        client_socket.send(result)
                        time.sleep(6)

except KeyboardInterrupt:
        print("Cleanup")
        GPIO.cleanup()


client_socket.close()
server_socket.close()

我收到这个错误:

Traceback (most recent call last):
 File "/home/pi/Documents/testsev.py", line 36, in <module>
   client_socket.send(result)
 TypeError: a bytes-like object is required, not 'DHT11Result'

我想我必须将 result 转换为字节形式,但我不知道该怎么做。

我怎样才能成功地将这个数据发送到服务器,这个代码有什么需要改变的运行吗?

您需要序列化数据

例如,使用JSON

import json

if result.is_valid():
    data = {'temp': result.temperature, 'humidity': result.humidity}
    client_socket.send(json.dumps(data).encode('utf-8'))