通过套接字发送传感器数据
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'))
我想把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'))