HaaS100硬件支持一路RS485,硬件接口定义如图1.4.11所示。
我们根据图1.2.22和图1.4.11所示的温湿度模块和HaaS100的RS485接口说明,按图接线,并上电。
● 图1.4.11 HaaS100 RS485接口图
查询相关资料后,获知RS485对应的port为1,在board.json文件中增加如下定义声明:
阿里云HaaS100平台提供了Python轻应用Modbus通信库,不过目前仅支持RTU模式,ASCII和TCP模式暂不支持。
相关接口如下:
(1)modbus.init(port, baud_rate, parity)
初始化modbus协议。
参数
port(int):串口端口号。
baud_rate(int):可选参数,波特率,默认值为9600Baud。
parity(int):可选参数,奇偶校验信息,默认值为0。可选值参考奇偶校验信息(PARITY)。
返回
0:成功,其他:失败。
引发
OSError-EBUSY或EINVAL
(2)modbus.deinit()
释放modbus协议
返回
0:成功,其他:失败。
引发
OSError-EBADF
(3)modbus.write(slave_addr, start_addr, data, timeout)
向从机多个保持寄存器中写入数据。
参数
slave_addr(int):请求的从机地址,0代表广播。
start_addr(int):写寄存器的起始地址。
data(bytearray):写寄存器的数据。
timeout(int):请求超时时间,单位是ms(毫秒),-1表示永久等待。
返回
tuple,4元组中的条目格式为:
status:请求状态,0表示成功,其他表示失败。具体数值参考STATUS。
resp_addr:响应地址。
resp_value:响应数据。
exception_code:异常代码。
引发
OSError-EINVAL
(4)modbus.read(data, slave_addr, start_addr, timeout)
读取多个保持寄存器中的数据。
参数
data(bytearray):读取的保持寄存器数据,data的长度表示期待读取的数量。
slave_addr(int):请求的从机地址,0代表广播。
start_addr(int):保持寄存器的起始地址。
timeout(int):请求超时时间,单位是ms(毫秒),-1表示永久等待。
返回
tuple,2元组中的条目格式为:
status:请求状态,0表示成功,其他表示失败。
respond_count:读取到数据的字节数,该数值不大于data的长度。
引发
OSError-EINVAL
读取YF3610-TH21温湿度模块的值,主要会用到modbus.init、modbus.deinit和modbus.read这三个函数。相关代码如下:
程序部署到设备运行后,输出如下信息(如图1.4.12所示)。
● 图1.4.12 HaaS100 读取温湿度