293 lines
13 KiB
Python
293 lines
13 KiB
Python
#cd demo/ceshi-1/
|
||
#python ceshi.py
|
||
|
||
import serial
|
||
import time
|
||
import struct
|
||
import json
|
||
import requests
|
||
def hex_to_float(hex_str):
|
||
hex_int = int(hex_str, 16)
|
||
return struct.unpack('!f', struct.pack('!I', hex_int))[0]
|
||
def print_json(data):
|
||
print(json.dumps(data, sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False))
|
||
|
||
temp_send = '06 03 01 F4 00 02 85 B2 '#温湿度查询指令
|
||
co2_send = '06 03 01 F7 00 02 75 B2 '#二氧化碳查询指令
|
||
pressure_send = '06 03 01 F9 00 02 14 71 '#气压查询指令
|
||
sun_send = '06 03 01 FA 00 02 E4 71 '#光照查询指令
|
||
|
||
soil_send = '02 03 00 00 00 04 44 3A'#土壤查询指令
|
||
danlinjia_send ='02 03 00 04 00 03 44 39'#氮磷钾查询指令
|
||
|
||
rainfall_send = '03 03 00 00 00 01 85 E8'#雨量查询指令
|
||
|
||
windspeed_send = '04 03 00 00 00 02 C4 5E'#风速查询指令
|
||
winddirection_send = '05 03 00 00 00 02 C5 8F'#风向查询指令
|
||
|
||
|
||
ser = serial.Serial("/dev/ttyS2", 9600)
|
||
|
||
# 发送的数据转为2进制b'\x01\x03\x00\x00\x00\x02\xc4\x0b'
|
||
temp_send = bytes.fromhex(temp_send)
|
||
co2_send = bytes.fromhex(co2_send)
|
||
pressure_send = bytes.fromhex(pressure_send)
|
||
sun_send = bytes.fromhex(sun_send)
|
||
soil_send = bytes.fromhex(soil_send)
|
||
danlinjia_send = bytes.fromhex(danlinjia_send )
|
||
rainfall_send = bytes.fromhex(rainfall_send)
|
||
windspeed_send = bytes.fromhex(windspeed_send)
|
||
winddirection_send = bytes.fromhex(winddirection_send)
|
||
# print(temp_send)
|
||
# print(co2_send)
|
||
# print(pressure_send)
|
||
# print(sun_send)
|
||
# print(soil_send)
|
||
# print(danlinjia_send)
|
||
# print(rainfall_send)
|
||
# print(windspeed_send)
|
||
# print(winddirection_send)
|
||
# print('{"name":%s,"name1":%s}', temp_send,temp_send)
|
||
|
||
|
||
|
||
|
||
# if __name__ == '__main__':
|
||
# data = {
|
||
# "aaa": {
|
||
# "bbb":
|
||
# {
|
||
# "vvv": ['541454154', '152125', '151515', {"521515": ""}],
|
||
# "ccc": "i5452126541rl",
|
||
# "cccd": 10
|
||
# }
|
||
# },
|
||
# "12222": {
|
||
# "fhvhgvh": "",
|
||
# "nbvghngvc": "",
|
||
# "nbvg h": "nvhvhv",
|
||
# }
|
||
# }
|
||
|
||
|
||
while True:
|
||
# if ser.is_open:
|
||
print('start')
|
||
ser.write(temp_send)
|
||
time.sleep(1)
|
||
# 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
tempbuffer_data = ser.in_waiting
|
||
# print(buffer_data, 'buffer_data')
|
||
if tempbuffer_data:
|
||
# 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
return_data = ser.read(tempbuffer_data)
|
||
# print('返回的数据2进制:', return_data)
|
||
# 二进制转换为16进制:010304010802307b79
|
||
return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# 对返回的数据进行解析,获取温度和湿度数据
|
||
# print("当前湿度为:", int(return_data_hex[6:10], 16)/10)
|
||
# print("当前温度为:", int(return_data_hex[10:14], 16)/10)
|
||
airtemp_data=int(return_data_hex[6:10], 16)/10
|
||
airhumi_data=int(return_data_hex[10:14], 16)/10
|
||
time.sleep(5)
|
||
|
||
# print('send co2 directives')
|
||
ser.write(co2_send)
|
||
time.sleep(1)
|
||
# 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
co2buffer_data = ser.in_waiting
|
||
# print(buffer_data, 'buffer_data')
|
||
if co2buffer_data:
|
||
# 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
return_data = ser.read(co2buffer_data)
|
||
# print('返回的数据2进制:', return_data)
|
||
# 二进制转换为16进制:010304010802307b79
|
||
return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# 对返回的数据进行解析,获取温度和湿度数据
|
||
# print("当前co2为:", int(return_data_hex[6:10], 16))
|
||
co2_data=int(return_data_hex[6:10], 16)
|
||
time.sleep(5)
|
||
|
||
# print('send pressure directives')
|
||
ser.write(pressure_send)
|
||
time.sleep(1)
|
||
# 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
pressurebuffer_data = ser.in_waiting
|
||
# print(buffer_data, 'buffer_data')
|
||
if pressurebuffer_data:
|
||
# 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
return_data = ser.read(pressurebuffer_data)
|
||
# print('返回的数据2进制:', return_data)
|
||
# 二进制转换为16进制:010304010802307b79
|
||
return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# 对返回的数据进行解析,获取温度和湿度数据
|
||
# print("当前气压为:", int(return_data_hex[6:10], 16)/10)
|
||
pressure_data=int(return_data_hex[6:10], 16)/10
|
||
time.sleep(5)
|
||
|
||
|
||
# print('send sun directives')
|
||
ser.write(sun_send)
|
||
time.sleep(1)
|
||
# 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
sunbuffer_data = ser.in_waiting
|
||
# print(buffer_data, 'buffer_data')
|
||
if sunbuffer_data:
|
||
# 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
return_data = ser.read(sunbuffer_data)
|
||
# print('返回的数据2进制:', return_data)
|
||
# 二进制转换为16进制:010304010802307b79
|
||
return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# sun=round(hex_to_float(return_data_hex[6:14])*6, 2)
|
||
# print("当前光照为:", sun)#单位lux
|
||
# print("当前光照为:", int(return_data_hex[6:14], 16))
|
||
sun_data=int(return_data_hex[6:14], 16)
|
||
time.sleep(5)
|
||
|
||
# print('send soil directives')
|
||
ser.write(soil_send)
|
||
time.sleep(1)
|
||
# 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
soilbuffer_data = ser.in_waiting
|
||
# print(buffer_data, 'buffer_data')
|
||
if soilbuffer_data:
|
||
# 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
return_data = ser.read(soilbuffer_data)
|
||
# print('返回的数据2进制:', return_data)
|
||
# 二进制转换为16进制:010304010802307b79
|
||
return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# 对返回的数据进行解析,获取温度和湿度数据
|
||
# print("当前湿度值为:", int(return_data_hex[6:10], 16)/10)
|
||
# print("当前温度值为:", int(return_data_hex[10:14], 16)/10)
|
||
# print("当前电导率为:", int(return_data_hex[14:18], 16)/10)
|
||
# print("当前PH值为:", int(return_data_hex[18:22], 16)/10)
|
||
humidity_data=int(return_data_hex[6:10], 16)/10
|
||
temperature_data=int(return_data_hex[10:14], 16)/10
|
||
electrical_data=int(return_data_hex[14:18], 16)/10
|
||
PH_data=int(return_data_hex[18:22], 16)/10
|
||
time.sleep(5)
|
||
|
||
|
||
# print('send danlinjia directives')
|
||
ser.write(danlinjia_send)
|
||
time.sleep(1)
|
||
# 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
danlinjiabuffer_data = ser.in_waiting
|
||
# print(buffer_data, 'buffer_data')
|
||
if danlinjiabuffer_data:
|
||
# 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
return_data = ser.read(danlinjiabuffer_data)
|
||
# print('返回的数据2进制:', return_data)
|
||
# 二进制转换为16进制:010304010802307b79
|
||
return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# # 对返回的数据进行解析,获取温度和湿度数据
|
||
# print("当前氮含量为:", int(return_data_hex[6:10], 16)/10)
|
||
# print("当前磷含量为:", int(return_data_hex[10:14], 16)/10)
|
||
# print("当前钾含量为:", int(return_data_hex[14:18], 16)/10)
|
||
dan_data=int(return_data_hex[6:10], 16)/10
|
||
lin_data=int(return_data_hex[10:14], 16)/10
|
||
jia_data=int(return_data_hex[14:18], 16)/10
|
||
time.sleep(5)
|
||
|
||
# print('send rainfall directives')
|
||
ser.write(rainfall_send)
|
||
time.sleep(1)
|
||
# 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
rainfallbuffer_data = ser.in_waiting
|
||
# print(buffer_data, 'buffer_data')
|
||
if rainfallbuffer_data:
|
||
# 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
return_data = ser.read(rainfallbuffer_data)
|
||
# print('返回的数据2进制:', return_data)
|
||
# 二进制转换为16进制:010304010802307b79
|
||
return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# # 对返回的数据进行解析,获取温度和湿度数据
|
||
# print("当前雨量值为:", int(return_data_hex[6:10], 16)/10)#单位mm
|
||
rainfall_data=int(return_data_hex[6:10], 16)/10
|
||
time.sleep(5)
|
||
|
||
# print('send sun directives')
|
||
# ser.write(sun_send)
|
||
# time.sleep(1)
|
||
# # 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
# sunbuffer_data = ser.in_waiting
|
||
# # print(buffer_data, 'buffer_data')
|
||
# if sunbuffer_data:
|
||
# # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
# return_data = ser.read(sunbuffer_data)
|
||
# # print('返回的数据2进制:', return_data)
|
||
# # 二进制转换为16进制:010304010802307b79
|
||
# return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# # 对返回的数据进行解析,获取温度和湿度数据
|
||
# # print("当前光照强度为:", int(return_data_hex[6:14], 16))#单位lux
|
||
# sun=hex_to_float(return_data_hex[6:14])
|
||
# print("当前光照强度为为:", sun)#单位m/s
|
||
# time.sleep(5)
|
||
|
||
# print('send windspeed directives')
|
||
ser.write(windspeed_send)
|
||
time.sleep(1)
|
||
# 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
windspeedbuffer_data = ser.in_waiting
|
||
# print(buffer_data, 'buffer_data')
|
||
if windspeedbuffer_data:
|
||
# 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
return_data = ser.read(windspeedbuffer_data)
|
||
# print('返回的数据2进制:', return_data)
|
||
# 二进制转换为16进制:010304010802307b79
|
||
return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# print("当前风速为:", int(return_data_hex[6:10], 16)/10)#单位mm
|
||
speedwind_data=int(return_data_hex[6:10], 16)/10
|
||
time.sleep(5)
|
||
|
||
# print('send winddirection directives')
|
||
ser.write(winddirection_send)
|
||
time.sleep(1)
|
||
# 获取返回的缓冲data,获取的是buffer_data的长度 9
|
||
winddirectionbuffer_data = ser.in_waiting
|
||
# print(buffer_data, 'buffer_data')
|
||
if winddirectionbuffer_data:
|
||
# 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
|
||
return_data = ser.read(winddirectionbuffer_data)
|
||
# print('返回的数据2进制:', return_data)
|
||
# 二进制转换为16进制:010304010802307b79
|
||
return_data_hex = str(return_data.hex())
|
||
# print('返回的数据转换为16进制:', return_data_hex)
|
||
# print("当前风向为:", int(return_data_hex[10:14], 16))#单位mm
|
||
winddirection_data=int(return_data_hex[10:14], 16)
|
||
time.sleep(5)
|
||
# print('{"name":"%d","name1":"%d"}', 123,456)
|
||
# data = [{'ngvhgv': airtemp_data}, {'nvjgvjvj':airhumi_data}]
|
||
data = {'ambient_temperature': airtemp_data,
|
||
'ambient_humidity': airhumi_data,
|
||
'carbon_dioxide': co2_data,
|
||
'ambient_air_pressure': pressure_data,
|
||
'ambient_lighting': sun_data,
|
||
'soil_moisture': humidity_data,
|
||
'soil_temperature': temperature_data,
|
||
'soil_conductivity': electrical_data,
|
||
'soil_PH': PH_data,
|
||
'soil_potassium_phosphate_nitrogen': dan_data,
|
||
'soil_potassium_phosphate_phosphorus': lin_data,
|
||
'soil_potassium_phosphate_potassium': jia_data,
|
||
'rainfall': rainfall_data,
|
||
'wind_speed': speedwind_data,
|
||
'wind_direction': winddirection_data}
|
||
# print('stop')
|
||
# print("请求:")
|
||
print_json(data)
|
||
# requests.post("http://192.168.1.27:8000/add/lot_data/123", json=data)
|
||
r=requests.post("http://192.168.1.27:8000/add/lot_data/123", json=data)
|
||
print('返回的数据结果:', r)
|
||
|
||
|
||
|