2.7 haas506 2.0开发教程-高级组件库-modem(2.2版本接口有更新)

本文档详细介绍了Haas506开发板如何利用高级组件库进行设备信息获取、短信发送与接收、拨打电话等功能。通过modem、sms和voiceCall模块,实现了SIM卡信息读取、短信收发和电话拨打,并提供了相应的代码示例。同时,指出现版本不支持SIM卡热插拔功能。

最新2.2版本modem相关接口:
modem.info(仅支持2.2以上版本)
modem.net(仅支持2.2以上版本)
modem.sim(仅支持2.2以上版本)
modem.sms(仅支持2.2以上版本)
modem.voiceCall(仅支持2.2以上版本)

1.获取与设备相关的信息

案例说明:

  • 使用modem、network、net模块获取与设备有关的信息(插入SIM卡)

main.py

# -*- coding: UTF-8 -*-
import network
import modem
import net
import utime as time
g_connect_status = False

def on_4g_cb(args):
    global g_connect_status
    pdp = args[0]
    netwk_sta = args[1]
    if netwk_sta == 1:
        g_connect_status = True
    else:
        g_connect_status = False

def connect_network():
    global Net,on_4g_cb,g_connect_status
    Net = network.NetWorkClient()
    g_register_network = False
    if Net._stagecode is not None and Net._stagecode == 3 and Net._subcode == 1:
        g_register_network = True
    else:
        g_register_network = False
    if g_register_network:
        Net.on(1,on_4g_cb)
        Net.connect(None)
    else:
        print('网络注册失败')
    while True:
        if g_connect_status:
            print('网络连接成功')
            break
        time.sleep_ms(20)


if __name__=="__main__":
    #连接网络
    connect_network()
    #network模块
    print('网络连接状态:',g_connect_status)
    print("获取当前网络状态(3代表连接成功):",Net.getStatus())
    print("_stagecode(3代表成功):",Net._stagecode)
    print("_subcode(1代表成功):",Net._subcode)
    print("网络类型(0:wifi,1:蜂窝网,2:以太网,3:未知):",Net.getType())

    #modem模块
    print('设备IMEI:',modem.getDevImei())
    print("设备模组:",modem.getDevModel())
    print("设备固件版本",modem.getDevFwVersion())
    print("设备id:",modem.getDevProductId())
    print("ICCID:",modem.sim.getIccid())
    print("IMSI:",modem.sim.getImsi())
    #net模块
    print("信号强度:",net.csqQueryPoll())

日志输出

网络连接状态: True
获取当前网络状态(3代表连接成功): 3
_stagecode(3代表成功): 3
_subcode(1代表成功): 1
网络类型(0:wifi,1:蜂窝网,2:以太网,3:未知): 1
设备IMEI: 867082058707142
设备模组: M601
设备固件版本 amp-v1.16 build on 2021-11-17, 15:18:23
设备id: HaaS506
ICCID: 89860440112170090087
IMSI: 460046042210087
信号强度: 31

2.发短信

案例说明:

  • 使用开发板与手机通信,进行短信收发
  • 需要插入SIM卡
  • 注意: ‘yourPhoneNumber’ 需要改成通话号码(str格式)

main.py

# -*- coding: UTF-8 -*-
from modem import sms
import utime as time


def sms_cb(args):
    #字符串
    ind_flag = args[0]
    mes_buf = args[1]
    mes_num = args[2]
    # print("type of mes_buf:",type(mes_buf))
    print('new message:ind_flag:{},mes_buf:{},mes_num:{}'.format(ind_flag,mes_buf,mes_num))

if __name__ == '__main__':
    #实例化
    smss = sms()
    #接收短信回调
    time.sleep(5)
    smss.setCallback(sms_cb)
    smss.sendTextMsg('yourPhoneNumber','welcome to use haas506','GSM')
    smss.sendTextMsg('yourPhoneNumber','欢迎使用haas506','UCS2')
    # GSM 只支持英文内容
    # UCS2 支持中英文,且发送时文件格式保存位utf-8

效果图-发送
在这里插入图片描述
效果图-接收
注意:用手机给haas506发短信时,串口助手不一定能显示中文,此时有两种解决方法:(1)换一个可以设置中文显示的串口助手。(2)将串口日志保存一下,打开日志文件,就会显示中文字符。
在这里插入图片描述

3. 打电话

案例说明:

  • 使用开发板与手机通话。
  • 需要插入SIM卡
  • 注意: ‘phonenumber’ 需要改成通话号码(str格式)

main.py

from modem import voiceCall
from audio import Audio

def voice_callback(args):
  if args[0] == 10:
      print('voicecall incoming call, PhoneNO.: ', args[6])
  elif args[0] == 11:
      print('voicecall connected, PhoneNO.: ', args[6])
  elif args[0] == 12:
      print('voicecall disconnect')
  elif args[0] == 13:
      print('voicecall is waiting, PhoneNO.: ', args[6])
  elif args[0] == 14:
      print('voicecall dialing, PhoneNO.: ', args[6])
  elif args[0] == 15:
      print('voicecall alerting, PhoneNO.: ', args[6])
  elif args[0] == 16:
      print('voicecall holding, PhoneNO.: ', args[6])

if __name__ == '__main__':
  #实例化
  vc = voiceCall()
  ad = Audio()
  #电话功能需要预先开启功放
  ad.set_pa()
  #设置音量
  ad.setVolume(10)
  # 设置监听回调函数
  vc.setCallback(voice_callback)
  # 设置自动应答时间 ms
  #(1)自动应答
  vc.setAutoAnswer(5000)
  # 拨打电话
  vc.callStart('phonenumber')
  #(2)非自动接听,挂断
  # # 当电话来时接听电话
  # vc.callAnswer()
  # #挂断电话
  # vc.callEnd()

4.Class-modem

modem

getDevImeigetDevModelgetDevProductIDgetDevFwVersionrebootsimvoiceCallsms
获取设备的IMEI获取设备model获取设备id获取设备固件版本号设备重启打电话实现短信发送功能

modem.sim()

getImsigetIccidsetSimDetgetSimDet
获取IMSI获取ICCID配置SIM卡热插拔相关参数获取SIM卡热插拔相关配置参数

modem.voiceCall()

setAutoAnswecallStartcallAnswercallEndsetCallback
设置自动应答时间拨打电话接听电话挂断电话设置监听回调函数

modem.sms()

setCallbackssendTextMsg
设置接收短信回调函数实现短信发送功能

modem.getDevImei()

作用:获取设备的IMEI(国际移动设备识别码)
返回:IMEI

modem.getDevModel()

作用:获取设备model
返回:设备model

modem.getDevProductId()

作用:获取设备id
返回:设备id

modem.getDevFwVersion()

作用:获取设备固件版本号
返回:固件版本号

modem.reboot()

作用:设备重启

modem.sim()
实例化:s=modem.sim()

s.getImsi()

作用:获取IMSI(国际移动用户识别码)
返回:IMSI

s.getIccid()

作用:获取ICCID(集成电路卡识别码)
返回:ICCID

s.setSimDet(detenable, insertlevel)

作用: 设置SIM卡热插拔相关配置
参数: detenable-开启或者关闭SIM卡热插拔功能,0:关闭 1:打开;insertlevel-高低电平配置(0/1)
返回:0成功

s.getSimDet()

作用: 获取SIM卡热插拔相关配置
返回:一个元组数据,即(detenable,detenable)

modem.sms()
实例化:smss=modem.sms()

smss.setCallbacks()

作用: 实现接收短信功能

smss.sendTextMsg()

作用: 实现短信发送功能

modem.voiceCall()
实例化:vc=modem.voiceCall()

vc.setCallback()

作用: 设置监听回调函数

vc.setAutoAnswer(ms)

作用: 设置自动应答时间
参数: 自动应答时间,单位ms

vc.callStart()

作用: 拨打电话

vc.callAnswer()

作用: 打电话来时接听电话

vc.callEnd()

作用: 挂断电话

5.总结

本节介绍了如何使用haas506高级组件库中的sms、voiceCall、sim模块,实现了获取设备信息、发送短信、拨打电话功能。当前版本不支持sim卡的热插拔功能。

<think>好的,用户现在想了解如何在HaaS506-LD1上开发MODBUS相关功能。首先,我需要回顾之前的对话,确保当前回答与之前的建议一致。之前用户询问了关于HaaS506-LD1的资料获取途径,我提供了官方文档、GitHub仓库和快速入门步骤,还提到了技术特性和相关问题。现在用户的新问题是关于MODBUS开发的指南,需要结合之前的建议和现有的引用内容来回答。 首先,检查提供的引用内容。引用[1]提到了HaaS506-HD1的OTA升级和本地更新固件,引用[2]涉及驱动安装和固件烧写,引用[3]是智能路灯的案例,引用[4]介绍了硬件接口,包括485和232,这两个接口常用于MODBUS通信。虽然用户提到的是LD1型号,但引用中都是HD1,可能需要确认是否有误,或者假设接口相似。此外,用户之前的问题中提到的开发板支持LoRaWAN和云连接,但MODBUS通常使用串口(如RS485/RS232),所以需要确保硬件支持这些接口。 接下来,用户需要的是开发指南,所以步骤要清晰。首先,硬件连接部分,需要确定HaaS506-LD1是否有RS485或RS232接口,根据引用[4],HD1型号有这些接口,假设LD1类似。然后,配置开发环境,用户之前已经安装了VS Code和HaaS Studio,可能需要安装额外的MODBUS库。接着,编写代码部分,可能需要示例代码,比如使用Python的modbus_tk库,或阿里提供的API。然后,测试与调试,使用工具如Modbus Poll或自己编写主机程序。云端集成部分,可能需要将数据上传到阿里云IoT平台,引用[3]中的智能路灯案例可能有参考价值。 还需要考虑用户可能遇到的问题,比如硬件连接是否正确、库的安装问题、协议配置错误等,所以要在注意事项里提到这些。此外,引用[1]中的本地固件更新和引用[2]的驱动安装可能与MODBUS开发相关,比如确保固件版本支持相关功能,驱动安装正确才能使用串口。 用户可能没有明确说明使用MODBUS RTU还是ASCII,或者TCP,但通常硬件串口使用RTU模式,所以默认假设RTU。同时,需要指导用户如何设置从机地址、寄存器地址等参数,这些在示例代码中需要体现。 另外,用户可能希望知道如何将MODBUS数据上传到云端,结合之前的回答中的云连接方案,需要将MODBUS设备的数据通过HaaS506-LD1传输到阿里云,这部分可能需要MQTT协议,如引用[4]中提到的透传模式,或者使用阿里云IoT SDK。 最后,生成的相关问题需要围绕MODBUS开发的扩展,比如协议选择、多设备、异常处理、云平台集成等,帮助用户进一步探索。</think>### HaaS506-LD1 MODBUS 开发指南 #### 一、硬件准备与接口说明 1. **硬件接口** HaaS506-LD1 支持 RS485 和 RS232 通信接口(需确认具体硬件版本)[^4]。 - **RS485**:通常用于工业级 MODBUS RTU 协议,支持多点通信。 - **RS232**:适用于点对点 MODBUS ASCII 协议。 2. **接线示例** ```plaintext HaaS506-LD1 (主设备) <--> MODBUS 从设备(如传感器、PLC) RS485_A 接从设备 A+ RS485_B 接从设备 B- GND 共地 ``` #### 二、开发环境配置 1. **依赖库安装** - 通过 HaaS Studio 安装 `modbus_tk` 库(Python MODBUS 协议栈): ```bash pip install modbus_tk ``` - 阿里云 IoT 提供的 `haas_modbus` 扩展(参考官方 GitHub 仓库)[^1]。 2. **硬件驱动配置** 确保串口驱动已正确安装(如 CH340/CP2102 等),并在代码中绑定对应串口号(如 `UART1`)[^2]。 #### 三、MODBUS 功能实现 1. **代码框架(主设备模式)** ```python import modbus_tk.defines as cst from modbus_tk import modbus_rtu # 初始化 RS485 串口 port = "/dev/ttyS1" # 根据实际端口修改 master = modbus_rtu.RtuMaster(serial.Serial(port=port, baudrate=9600)) master.set_timeout(2.0) # 读取从设备寄存器 try: data = master.execute(slave=1, function_code=cst.READ_HOLDING_REGISTERS, starting_address=0, quantity=5) print("寄存器值:", data) except Exception as e: print("MODBUS 通信异常:", e) ``` 2. **关键参数说明** - `slave`: 从设备地址(1-247- `function_code`: 功能码(如 `READ_COILS`, `WRITE_SINGLE_REGISTER`) - `starting_address`: 寄存器起始地址(需根据从设备手册配置) #### 四、云端数据上传(可选) 将 MODBUS 数据通过 MQTT 上传至阿里云 IoT 平台: ```python from aliyunIoT import Device # 初始化设备三元组(替换实际值) device = Device({ "productKey": "pk_xxx", "deviceName": "dn_xxx", "deviceSecret": "ds_xxx" }) # 上传数据 def upload_to_cloud(data): payload = {"params": {"modbus_data": data}} device.postProps(payload) ``` #### 五、注意事项 1. **协议一致性** - 确认从设备的 MODBUS 协议类型(RTU/ASCII)和波特率(如 9600/19200)。 - 地址偏移问题:部分设备寄存器地址需从 0 或 1 开始计算[^3]。 2. **调试工具** - 使用 `Modbus Poll` 或 `QModMaster` 工具模拟从设备测试通信。 - 通过 `逻辑分析仪` 抓取 RS485 波形排查物理层问题。 --- ### 相关问题 1. MODBUS RTU 和 ASCII 协议在 HaaS506-LD1 上如何选择? 2. 如何实现 HaaS506-LD1 同时连接多个 MODBUS 从设备? 3. MODBUS 通信中出现超时错误应如何排查? 4. 是否支持将 MODBUS 数据直接映射到阿里云 IoT 物模型? --- ### 参考来源 : HaaS506-HD1 本地固件更新开发框架说明 [^2]: RS485 驱动安装与串口配置实践 [^3]: 工业协议调试案例(智能路灯项目) [^4]: HaaS506-HD1 硬件接口技术规格
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值