前言
为做农业项目,学习使用LORA通讯方式,特点:距离远、无线
这里以组网模式
进行配置
一、LG210网关设置
配置LG210网关软件下载地址:https://www.usr.cn/Product/347.html
打开软件
···
连接设备:使用网线对LG210网关进行配置
1、点击连接设备
的下拉,选择网络连接
;
2、点击搜索设备
,出现在线设备信息;
3、点击选中对应设备信息;
4、点击选择设备
。
···
读取参数、设置参数、重启
粘贴复制网关ID(Hex)
,填写到LG206配置软件中
···
···
二、LG206设备设置
配置LG206设备软件下载地址:https://www.usr.cn/Product/295.html
通过USB转232线
将电脑与LG206进行串口通讯连接,并进行设备配置
读取参数、设置参数、重启
···
- 实现电脑端向LG210网关发送读命令,LG210网关与LG206设备进行LORA通讯,将读命令传给LG206,LG206再将读命令发送给温湿度变送器,至此电脑端接收到温度、湿度数据
三、Python代码测试
需要注意:
1、port = 1883
,res = '192.168.1.58'
,与LG210软件
设置对应,并且确定勾选了TCP client
;
2、温湿度变送器设置的是轮训
,不是监听
,波特率
设置与LG210、LG206相同,都是115200
,变送器地址位
最好不要设置默认的01
,我这里设为03
;
3、以上全部设置好后,记得断开连接再进行代码测试。
# -*- coding:utf-8 -*-
import datetime
import socket
import struct
import time
import traceback
import os
def calc_crc(string):
data = bytearray.fromhex(string)
# print(data)
crc = 0xFFFF # 初始值
for pos in data:
crc ^= pos # 每次两位16进制和crc低8位异或
for i in range(8): # 右移八次
if (crc & 1) != 0: # 如果移出去的不是0(即移出去的是1)则右移1位且和A001异或。否则为0直接右移1位不作其他处理
crc >>= 1
crc ^= 0xA001
else:
crc >>= 1
ret = hex(((crc & 0xff) << 8) + (crc >> 8))[2:] # 高低8位对调。
if len(ret) != 4:
ret = '0' * (4 - len(ret)) + ret
return ret
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 1883
res = '192.168.1.58'
soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) # 端口复用
soc.bind((res, port))
soc.listen(128) # 半连接池,限制的是请求数
resv_list = ''
is_first_sample = True
time_start = datetime.datetime.now()
t = True
while t:
_ = (datetime.datetime.now() - time_start).total_seconds()
# print(_)
if _ < 120:
try:
if is_first_sample:
print('start....')
# soc.settimeout(30)
# conn, client_addr = soc.accept()
# conn.settimeout(30)
if is_first_sample:
soc.settimeout(30)
conn, client_addr = soc.accept()
conn.settimeout(30)
print('已经有一个连接建立成功', client_addr)
is_first_sample = False
conn.send(bytes.fromhex('03 04 00 00 00 02 70 29 '))
print('发送:03 04 00 00 00 02 70 29 ')
recv = conn.recv(128)
recv = str(recv.hex())
# 数据CRC校验
if calc_crc(recv[:-4]) != recv[-4:]:
continue
print('CRC校验正常', datetime.datetime.now(), recv)
time.sleep(3)
except Exception as e:
print(e)
print(traceback.print_exc())
else:
t = False
# time.sleep(1)
# break
···
技术细节
前提
是配置好相关硬件设备,使之相互连接;
再者
是通过代码通讯,即TCP Server、TCP Client通信原理
小结
刚开始接触新设备、新通讯规则,难免有一丢丢抵制心理,但坚持看完说明文档,一步步操作,会有新发现,实在解决不了的,可以问有人物联网
的售后技术人工客服,这里非常感谢有人售后
技术支持,给出关键性思路解决问题。