diff --git a/ceshi.py b/ceshi.py new file mode 100644 index 0000000..a860565 --- /dev/null +++ b/ceshi.py @@ -0,0 +1,293 @@ +#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) + + + \ No newline at end of file