短信-应用

短信支持平台简介#

短信存储位置一般分为SM、ME和MT存储。

  • SM存储指接收短信后,将短信存储在SIM卡上,不占用设备储存空间。

  • ME存储指接收短信后,将短信存储在设备存储空间,不占用SIM卡空间。

  • MT存储指存储在SIM卡和设备空间中,如果SIM卡和设备存储空间其中某一个存储空间已满,则将之后的短信存储在另一个未存满的存储空间中。

目前QuecPython模组仅支持SM或ME存储,二者选一。对于短信数量统计以及功能支持,默认储存情况见下表3-1。

表3-1

型号具体型号默认存储位置存储最大数最大短信内容长度(字节)备注
SMMEGSMUCS2
EC600N
EG915N
EG912N
EC600NSM50180960420
EG915NSM50180960420
EG912NEN_AASM50180960420
EC200AEC200AME50180960420
EC600EEC600ECN_LCME501016070
BG95
BG600
BG600LM3ME5023640280
BG95M1ME5023640280
BG95M2ME5023640280
BG95M3ME5023640280
BG95M8ME5023640280
BG95M9ME5023640280
EC200U
EC600U
EG912U
EG915U
EC200USM50100640280
EC600USM50100640280
EG912USM50100640280
EG915USM50100640280
EC600G
EC800G
EC600GCN_LASM5010016070
EC800GCN_GASM5010016070

短信的应用#

短信在广播,公益信息传播方面有很大的优势,对于一些大型项目是重要的组成部分,以下着重介绍短信的应用。对于esim卡,下载profile一般不会有短信中心码,需要先查询下是否存在短信中心码,若不存在请咨询运营商获取正确的短信中心码进行设置。

注册回调函数#

此方法用于注册短信回调函数,当用户设备接收到短信时,会通过注册的回调函数来通知当前短信存储位置,以及短信存储位置的索引值。如下示例,如收到一条长短信,分成两条短信到达设备将触发两次回调函数。

注册回调接口如下:

sms.setCallback(usrFun)

示例

# -*- coding: UTF-8 -*-
#示例
import sms

def sms_callback(args):
     print("Get SIM ID :{}".format(args[0]))					
     print("Get Message index :{}".format(args[1]))
     print("Get Message Storage :{}".format(args[2]))

sms.setCallback(sms_callback)

短信中心码#

短信中心码是运营商提供的短信转发中心号码,需从运营商获取。设备先将短信发送到短信服务中心,短信服务中心转发收到的短信到目的设备所在的基站,基站将收到的短信下发到目的设备。短信中心码设置后,将其存入sim卡中,一张sim卡设置一次即可,设置即生效。如需更改可再次设置。

获取短信中心码#

短信中心码获取接口如下:

sms.getCenterAddr()

示例

# -*- coding: UTF-8 -*-
#示例
import sms

center_numer=sms.getCenterAddr()
print("Current center number is :{}".format(center_numer))
设置短信中心码#

设置短信中心码,一定要保证设置的短信中心码是正确的,否则可能导致短信发送失败。不同国家或地区的短信中心码,请联系当地的运营商进行确认。

短信中心码设置接口如下:

sms.setCenterAddr(addr)

示例

# -*- coding: UTF-8 -*-
#示例
import sms

# 获取当前短信中心码
center_numer=sms.getCenterAddr()
print("Current center number is :{}".format(center_numer))

#设置短信中心码
center_number="8613010112512"
sms.setCenterAddr(center_number)

短信存储位置#

短信存储位置物理上分为SIM卡、ME。目前仅支持SIM卡存储或ME存储,二者选一,不可同时选择。

获取存储位置#

短信存储位置从逻辑上分为读取和删除存储区域、发送和写入存储区域、接收存储区域。需接收存储区域、读取和删除存储区域保持一致,才能对接收到的短信进行读取和删除操作。

获取短信存储位置接口入下:

sms.getSaveLoc()

示例

# -*- coding: UTF-8 -*-
#示例
import sms

save_info= sms.getSaveLoc()
print("Message read and delete location : {}".format(save_info[0]))
print("Message write and send location  : {}".format(save_info[1]))
print("Message recv and save location   : {}".format(save_info[2]))
设置存储位置#

短信接收和删除以及读取,均需要从正确的短信存储位置进行操作,需正确设置短信存储位置,才能正常的进行功能应用。

短信存储位置设置接口如下:

sms.setSaveLoc(mem1, mem2, mem3)

示例

# -*- coding: UTF-8 -*-
#示例
import sms

# 获取当前短信存储位置

save_info=sms.getSaveLoc()

#设置短信读取和删除短信存储位置为SM
save_info[0][0]="SM"
sms.setSaveLoc(save_info[0][0],save_info[1][0],save_info[2][0])

#设置短信接收和读取存储位置为ME
save_info[2][0]="ME"
sms.setSaveLoc(save_info[0][0],save_info[1][0],save_info[2][0])

发送短信#

QuecPython发送短信接口使用便捷,只需输入接收方电话号码、短信内容,选择编码方式,直接调用接口即可。本功能分为发送TEXT短信、PDU短信两个接口 ,接口风格以及参数是相同的。若短信内容超过140字节,QuecPython底层将自动将其转为长短信,分为多条进行发送(表3-1标注支持最大短信条数大于1的情况下),接收端需要通过PDU方式读取,解析出此条长短信各个子短信的顺序号来重新进行合并才能正常显示为一条短信,否则此条长短信在对端只能拆分为多条短信显示。

发送TEXT短信#

发送TEXT短信,发送短信内容超过140字节,则转为长短信自动拆分为多条短信发送(表3-1标注支持最大字节数大于140字节的型号)。

接口如下:

sms.sendTextMsg(phoneNumber, msg, codeMode)

示例

# -*- coding: UTF-8 -*-
#示例
import sms

sms.sendTextMsg('18158626517', 'first test Message', 'GSM')

# TEXT短信示例 2,通过变量发送数据
data="second test message"
sms.sendTextMsg('18158626517', data , 'GSM')

发送PDU短信#

发送PDU短信,若短信内容长度超过140字节,则转为长短信自动拆分为多条短信发送(表3-1标注支持最大字节数大于140字节的型号)。

接口如下:

sms.sendPduMsg(phoneNumber, msg, codeMode)

示例

# -*- coding: UTF-8 -*-
#示例
import sms

# PDU短信示例1,直接填入需要发送的数据
sms.sendPduMsg('18158626517', 'send pdu msg by GSM mode.', 'GSM')

# PDU短信示例 2,通过变量发送数据
data="second test pdu message"
sms.sendPduMsg('18158626517', data, 'GSM')

获取短信数量#

在实际使用过程中,需要查询当前短信数量,来判断当前短信存储空间是否已满。此接口查询需要注意当前设置的短信储存空间,返回的短信数量为当前的短信存储空间的短信数量。

获取短信当前接收条数接口如下:

sms.getMsgNums()

示例

# -*- coding: UTF-8 -*-
#示例
import sms


#获取当前短信存储信息
save_info=sms.getSaveLoc()

#获取SM存储区域短信数量
sms.setSaveLoc("SM","SM","SM")
print("Current save info : {}".format(save_info))

#获取当前短信存储位置的短信数量
message_count=sms.getMsgNums()
print("Current message count :{}".format(message_count))

#获取ME存储区域短信数量
sms.setSaveLoc("SM","SM","ME")
message_count=sms.getMsgNums()
print("Current message count :{}".format(message_count))

读取短信#

当用户收到短信通知,可以通过以下两个接口来读取信息。分为TEXT读取短信和PDU方式读取短信。当收到长短信时,TEXT读取短信会无法区分顺序,需用PDU方式读取短信,根据短信接收PDU数据格式进行解析,合并,在完整应用示例代码中有对此的演示。

读取TEXT短信#

以TEXT方式读取短信内容:

sms.searchTextMsg(index)

示例

# -*- coding: UTF-8 -*-
#示例
import sms

message_count = sms.getMsgNums()
if message_count > 0:
    message_info = sms.searchTextMsg(0)
    print("Get Messge index 0 info :{}".format(message_info))
读取PDU短信#

以PDU方式读取短信内容:

sms.searchPduMsg(index)

示例

# -*- coding: UTF-8 -*-
#示例
import sms

message_count = sms.getMsgNums()
if message_count > 0:
    pdu_message = sms.searchPduMsg(0)
    # 读取到PDU短信,需要解码
    pdu_len = sms.getPduLength(pdu_message)
    message_info = sms.decodePdu(pdu_message, pdu_len)
    print("Get Messge index 0 info :{}".format(message_info))

删除短信#

当短信存储空间已满时,可能会导致设备接收不到短信,用户可通过以下接口来删除一些短信,释放短信存储空间。

删除指定位置短信#

删除短信接口如下:

sms.deleteMsg(index [, delmode])

示例

# -*- coding: UTF-8 -*-
#示例
import sms

#-------获取当前短信存储信息,确保删除短信位置不会出错
save_info=sms.getSaveLoc()
print("Will delete message from {} filed!".format(save_info[0][0]))

#删除短信索引为0的短信
sms.deleteMsg(0)

#---------指定删除短信存储区域内指定索引的短信数据,以ME存储区域为例-------
# 步骤 1、设置操作短信存储区域为ME
save_info[0][0]="ME"
sms.setSaveLoc(save_info[0][0],save_info[1][0],save_info[2][0])

# 步骤 2、设置需要操作的短信索引值,以索引值0为例
index  = 0
sms.deleteMsg(index)

删除全部短信#

接口同上,只做如下示例。

# -*- coding: UTF-8 -*-
#示例
import sms

#-------获取当前短信存储信息,确保删除短信位置不会出错
save_info=sms.getSaveLoc()
print("Will delete all message from {} filed!".format(save_info[0][0]))

#删除全部短信
sms.deleteMsg(1,4)

#---------指定删除短信存储区域内所有的短信数据,以ME存储区域为例-------
# 步骤 1、设置操作短信存储区域为ME
save_info[0][0]="ME"
sms.setSaveLoc(save_info[0][0],save_info[1][0],save_info[2][0])

# 步骤 2、删除ME存储区域所有接收到的短信
index  = 0
sms.deleteMsg(1,4)

应用示例#

长短信合并示例。

# codeing=UTF-8
import net
import checkNet
import sms as SMS

#本示例演示将设备内的两条长短信合并为一条短信
#本例演示要求短信索引值0和短信索引值1的短信为同一条长短信的内容

class QuecSMS():

    def __init__(self):
        self.__enable_log = False
        self.sms_set_enable_log()
        self.sms = SMS
        self.sms.setCallback(self.__SMS_Call_back)
        self.message=""

    def sms_deal_phone_number(self,args):
        data=enumerate(args)
        data_str1=""
        data_str2=""
        data_str3=""
        for index,value in data:
            if index % 2 == 0:
                data_str1=data_str1+value
            else:
                data_str2=data_str2+value
        for i in range(0,len(data_str1)):
            data_str3=data_str3+data_str2[i]
            data_str3=data_str3+data_str1[i]
        return data_str3

    def sms_display(self):
        self.__log("Get Message Loction : {}".format(self.sms.getSaveLoc()))
        sms.setSaveLoc("ME", "ME", "ME")
        self.__log("Get ME Message Numbers : {}".format(self.sms.getMsgNums()))
        sms.setSaveLoc("SM", "SM", "SM")
        self.__log("Get SM  Message Numbers : {}".format(self.sms.getMsgNums()))

    def sms_set_enable_log(self,flag=True):
        self.__enable_log = flag

    def __log(self,args):
        if self.__enable_log:
            print("QuecSMS_LOG: {}".format(args))


    def __SMS_Call_back(self,args):
        self.__log("Get SIM Id          : {}".format(args[0]))
        self.__log("Get Message index   : {}".format(args[1]))
        self.__log("Get Message Storage : {}".format(args[2]))

    def sms_delete_user_data_head(self):

        self.message=self.message[:58]+self.message[58+2*6:]

    def sms_replace_data_index(self,index,data):
        self.message = self.message[:index] + data + self.message[index+len(data):]

    def sms_append_sub_message_data(self,data):
        self.message = self.message + data

    def sms_decode_pdu_message(self):
        return self.sms.decodePdu(self.message,self.sms.getPduLength(self.message))

    def sms_get_message_info(self,index):
        """
        :param index    :短信索引值
        :tyoe  index    :整形

        :return         :元组类型
        元组内容:
        (message_ref,message_total_num,message_seq,sub_message_data,pdu_tye,sub_message_len)

        :message_ref        :短信参考标识,同一个标识表明为同一条短信
        :message_total_num  :此条长短信总条数
        :message_seq        :此条短信在长短信中的序号
        :sub_message_data   :词条短信的内容
        :pdu_tye            :PDU类型,bit 6标记是否包含用户报文头,长短信需要
        :sub_message_len    :此条短信内容长度

        """
        message0=self.sms.searchPduMsg(index)
        self.message = message0
        sca_num  = int(message0[0:2],16) - 1
        data_len = 2
        addr_type= message0[data_len:data_len+1*2]
        data_len = data_len+1*2

        sca      = message0[data_len:data_len+sca_num*2]
        # 电话号码高低位需要转换
        sca = self.sms_deal_phone_number(sca)

        if sca_num % 2 == 1:
             print("Get SCA phone {}".format(sca[:-1]))
        else:
             print("Get SCA phone {}".format(sca))

        data_len = data_len+sca_num*2

        pdu_tye   = int(message0[data_len:data_len+1*2],16)
        data_len = data_len+1*2

        oa_num   = int(message0[data_len:data_len+1*2],16)
        data_len = data_len+1*2
        oa_addr_type   = message0[data_len:data_len+1*2]
        data_len = data_len+1*2

        if oa_num % 2 == 1:
             oa_num_t   = int((oa_num + 1)/2)
        else:
             oa_num_t   = int((oa_num )/2)

        oa       = message0[data_len:data_len+oa_num_t*2]
        # 电话号码高低位需要转换
        oa       = self.sms_deal_phone_number(oa)

        if oa_num % 2 == 1:
             print("Get OA phone {}".format(oa[:-1]))
        else:
             print("get OA phone {}".format(oa))

        data_len = data_len+oa_num_t*2
        pid      = message0[data_len:data_len+1*2]

        data_len = data_len+1*2
        dcs      = message0[data_len:data_len+1*2]
        data_len = data_len+1*2
        scts     = message0[data_len:data_len+7*2]
        data_len = data_len+7*2
        sub_message_len = int(message0[data_len:data_len+1*2],16)
        data_len = data_len+1*2


        #长短信
        if ((pdu_tye & 0x40 ) >> 6) == 1:

                sub_message_head = message0[data_len:data_len+6*2]
                data_len = data_len+6*2

                # 长短信用户数据
                sub_message_data = message0[data_len:data_len+sub_message_len*2]
                #长短信,处理长短信用户报文头,获取IEI判断短信类型,参考3GPP TS 03.40  TP-user-data
                sub_head_iei         = int(sub_message_head[2:4],16)
                if sub_head_iei == 00:
                    # 长短信
                    message_ref = int(sub_message_head[6:8],16)
                    message_total_num = int(sub_message_head[8:10],16)
                    message_seq = int(sub_message_head[10:12],16)
                    return message_ref,message_total_num,message_seq,pdu_tye,sub_message_len,sub_message_data
                else:
                    # 其他类型短信
                    return 0,0,1,pdu_tye,sub_message_len,sub_message_data
        else:
             # 短短信
             sub_message_data = message0[data_len:data_len+sub_message_len*2]
             return 0,1,1,pdu_tye,sub_message_len,sub_message_data

if __name__ == '__main__':
    sms0 = QuecSMS()
    sms1 = QuecSMS()

    # 读取短信索引值0的短信内容
    message0=list(sms0.sms_get_message_info(0))

    # 读取短信索引值1的短信内容
    message1=list(sms1.sms_get_message_info(1))
    print("Get Messge 0 {}".format(message0))
    print("Get Messge 1 {}".format(message1))
    if message0[0] != message1[0]:
        print("Message 0 and Message 1 are not the content data of the same long SMS!")
        exit
    # 解码message0的PDU串
    message0_pdu=list(sms0.sms_decode_pdu_message())
    # 解码message1的PDU串
    message1_pdu=list(sms1.sms_decode_pdu_message())

    # 合并短信
    #判断messge 0 和 message 1的短信序列号那个在前
    if message0[2] < message1[2]:
        message_merge=message0_pdu[1]+message1_pdu[1]
    else:
        message_merge=message1_pdu[1]+message0_pdu[1]
    print("Get Merger Message is {}".format(message_merge))

短信常见应用场景#

功能应用场景#

  • 应用场景1

新办理SIM卡的情况下,不能确定短信中心码是否已经存在SIM卡中。需要先确定是否存在短信中心码。如不存在,请咨询对应运营商获取短信中心码进行设置,否则短信功能不正常。

  • 应用场景2

SIM卡变更运营商,需和原本运营商和新变更运营商确定短信中心码,进行重设,否则短信功能不正常。

  • 应用场景3

eSIM卡,在下载profile时,可能运营商不预设短信中心码,此时需要和运营商确定短信中心码。

  • 应用场景4

eSIM卡,更换profile时,会导致短信中心码被清除掉,需要重设短信中心码。

  • 应用场景5

SM和ME短信存储空间均已满,导致短信接收不到,只有清除短信,释放短信存储空间才能正常接收到短信。

  • 应用场景6

接收到短信后未读取短信,此时更换了短信读取和删除存储空间,导致短信读取不到,请更换回接收到短信时的短信读取和删除存储空间,进行短信的读取和删除操作。

  • 应用场景7

短信存储空间为SM,SM存储空间已满的情况下,想保留短信同时也保证短信可以正常接收,可以更换短信接收存储空间为ME。如果ME存储空间也已满,只有删除短信,才能正常接收到短信。

  • 应用场景8

设备在无信号环境中收不到短信,请移动设备到运营商信号覆盖范围内,此时才能进行短信的正常收发操作。

  • 应用场景9

设备长期不在运营商服务范围内,之后又回到运营商服务范围内,但是短信在短信服务中心存储时间到期,导致短信中心不再转发短信,进而导致短信丢失。此种场景,尽量避免,目前QuecPython发送短信有效期为最大,至于运营商短信存储有效期最大为多久,根据各个运营商的设定而定,可以和运营商进行确定。

业务应用场景#

由于科技的不断更新进步,短信发送成本越来越低,其在项目中的应用越来越广。常见应用场景如下:

  • 用户登录注册账号

    现在越来越多的服务类应用,通过手机号进行用户注册,用户登录,如各种银行手机应用,电商手机应用,以及各种类型的娱乐类手机应用等等。

  • 身份验证

    在实际的应用过程中,手机号往往和个人的实名信息紧密相连,这个特性在实际的业务中很容易做到身份验证,各种应用也利用这个特性进行身份的验证。

  • 安全验证

    确认验证,在手机应用找回密码,支付确认等场景中,由于手机短信消息不容易窃取,其往往扮演及其重要的作用,在安全支付业务中其特性占据极大优势,也在此类业务中大放光彩。

  • 通知告警,风险预警

    在信用卡,借记卡等金融服务类业务中,金融服务商在风控时发现用户账户存在风险性交易或盗刷类交易时,通过短信可以方便的提醒用户进行风险处理,及时挽回损失。

  • 应用推广

    在公司新建项目或业务时,为方便推广项目应用,可以通过短信推广到用户。

  • 密码找回

    现在无论个人电脑应用还是手机端应用都极其丰富,相应的应用账户越来越多,用户容易忘记密码,为了客户方便以及简化系统安全设计,利用短信进行密码找回是非常方便的方式。

以上常用场景和人民生活息息相关,也很常见。除此之外,公共服务类也经常采用短信的方式通知市民谨防诈骗,进行各种公共类服务的通知预警。

常见问题解答#

问题1:QuecPython支持是否支持长短信?如果支持,最大短信长度是多少?

QuecPython有很多类型的模组,其中有支持长短信,也有仅支持单条短信的模组型号,具体信息详情请见表3-1。

问题2:QuecPython发送长短信是如何处理的,是分成多包发送还是直接发送一条?

QuecPython长短信会分解为一条条发送。

问题3:QuecPython收到长短信是如何处理?是分开存储为多条短信,还是自动合并成一条短信存储?

QuecPython收到长短信会分开存储。这种情况下需要用PDU方式读取短信,并从PDU编码中用户数据头部信息中抽取短信参考编号、总条数、当前短信序号来进行自行处理。

问题4:发送端显示短信已经发送成功,但是模组端未接收到短信可能是什么原因?

可能有如下几种情况,用户可按照下面几种情况依次排查:

  • 确定模组端未接收到短信,还是由于解码失败短信未显示。

  • 短信发送成功,表示模组已经正常通过基站将短信数据发送出去,在传播到接收端的过程中出现了异常,这种情况需要从运营商以及基站和短信服务中心处排查问题。

  • 对于解码失败导致短信未显示这种情况,需要查看解码设置是否错误。

  • 短信中心服务码设置错误,导致短信接收不到。

    此种情况,需要咨询当地运营商短信中心服务码是否正确,如不正确,请调用接口进行重新设置。

  • 接收端短信存储空间是否已满。

    此种情况,需用户查询当前短信存储空间是否已经存满 。

  • 接收端是否误设了黑名单。

    此种情况,需用户检查设备是否误将对端设置了黑名单。

  • 接收端是否SIM卡已停机,欠费。

    此种情况需和运营商沟通查询设备当前状态。

  • 接收端是否长时间不在运营商服务区,超出了短信服务中心缓存短信的时限。

    此种情况,需要用户移动到运营商服务区。

  • 接收端是否开通了短信业务。

    此种情况请咨询运营商,是否开通了短信业务。

  • 接收端短信接收存储位置和短信读取存储位置不同,导致读取短信时从读取位置读取不到短信。

    此种情况请将短信接收存储位置和短信读取存储位置设置为相同存储位置。

问题5:模组插入SIM卡后,已经可以正常联网,为什么发送短信失败?

常见短信发送失败的原因可能有下面这些情况:

  • 查看是否在运营商开通了短信业务。如果未开通短信业务,请开通短信业务。
  • 查看短信服务中心码是否正确。如果未设置或设置错误短信中心码,请咨询运营商正确的短信中心码进行设置。
  • 网络运营商短信服务是否正常,可以向运营商进行确认。
  • 网络信号是否稳定,需要日志进行判断,请抓取日志,反馈到QuecPython团队进行分析。
  • 是否发短信时网络状态正处于激活态到空闲态,或空闲态到激活态的变化过程中,需要日志进行判断,请抓取日志,反馈到QuecPython团队进行分析。

相关推荐

移远通信携手高通,依托AI Hub共建端侧AI开发者生态

移远通信与高通公司今日共同宣布,将在终端侧AI领域进一步深化合作。®,加速生成式和智能体AI应用在物联网、下一代PC、智能汽车、XR设备等资源受限的终端侧的部署与普及。移远通信首席运营官张栋表示:“高通公司在端侧AI创新与生态建设上长期引领,AI Hub中国版更把优质模型与本地化服务带到开发者面前。我们很高兴与高通携手,用丰富的端侧AI硬件和工具链,把这些能力转化为可量产、可复制的场景方案。

281

具身智能走进工厂:移远宝维塔工博会两大发布,柔性智造与车载电子测试同步提速

10月12日,2026中国国际工业博览会在国家会展中心(上海)开幕。聚焦先进制造与工业自动化,移远通信旗下工业智能品牌于展会现场正式发布,并推出,围绕柔性制造与车载电子测试自动化,分享技术探索、量产实践与行业洞察。

191

移远产品体验官 | 第一期 • 入选结果揭晓

219

移远产品体验官正在招募|免费开发板等你来体验!

16

LVGL-流程

在当今嵌入式系统开发领域,图形化用户界面(GUI)的需求越发突显,Quecpython + LVGL将为您的GUI开发助力。

65

IOTE 2026 | 百搭主控板登场!移远QSM603FCP,打造AIoT终端的高效底座

8月26日,IOTE深圳物联网展拉开帷幕。作为聚焦AIoT、边缘智算与机器人创新应用的产业风向标,本届展会汇聚大量前沿技术成果。在此期间,作为填补中端市场高性能智控需求的关键一环,QSM603FCP凭借,为智慧零售、工业AI质检、边缘智算网关及具身智能机器人等领域提供了“即插即用”的硬核底座。作为主控板的“大脑”,QSM603FCP基于。

452

守护每一程翻山越岭,移远通信为闽西公路织就“数字防护网”

在福建龙岩,G319等国道蜿蜒穿行于闽西的崇山峻岭之间。沿线高边坡、深落差、急弯道此起彼伏,每逢汛期,强降雨频发,极易诱发山体滑坡、塌方等地质灾害,不仅严重威胁车辆和行人通行安全,也为公路养护带来了极大挑战。为补齐山区公路安全管控短板,推动交通基础设施数字化转型升级,龙岩市启动“普通公路示范通道智慧化改造项目”。山区边坡防护最大的难题,就是风险藏在暗处,很难提前预判。山体形变细微无声,传统巡检方式只能事后补救,很难提前捕捉萌芽风险。为此,

170

移远通信×星云环影,解锁儿童“AI智伴”新体验

AI科学分析总结儿童的兴趣及爱好,并提供成长建议与情绪分析。该方案使搭载同一机芯盒的不同毛绒玩具,能够拥有独特的性格与交互逻辑,实现了。

200

移远通信:以软硬一体的AIoT方案,玩转AI智能陪伴新风口

在7月23日举办的AIZQE 2026全球AI硬件与AIoT终端创新千人峰会・深圳站上,移远通信产品总监王鹏系统介绍了公司面向AI智能陪伴领域的一站式行业解决方案,全面拆解移远AIoT软硬一体化能力,并分享了在该赛道深耕多年、落地多元智能终端的实践经验。以“情感陪伴+科学教育”为核心,具备AI学伴团、万物识别、拍照学习等核心功能,支持户外、居家多场景,帮助用户随时随地探索知识,实现寓教于乐的伴随式学习。面向都市年轻上班族及独居人群,可实时捕捉用户情绪变化,输出即时、暖心的互动反馈。移远通信产品总监王鹏。

215

筑牢“安全底线”:移远通信车规IMU模组斩获ISO 26262 ASIL-B认证

在辅助驾驶技术飞速迭代的今天,如果说高精度的卫星定位决定了车辆感知能力的“上限”,那么惯性测量单元(IMU)便是守住车辆行驶安全的“底线”,它就像人的内耳前庭,时刻感知着车辆的姿态、加速度和角速度。即便驶入隧道、地下车库或高楼林立的城市峡谷,卫星信号被遮挡时,这颗深藏于车身内部的“电子内耳”依然能持续输出运动数据,确保定位不中断、决策不失控。2026年7月22日,移远GNSS产品部总监方成(右)&TÜV奥地利集团中国区总裁黄飞。

297

WAIC 2026 | 这套智能双臂组装方案,让“柔性智造”触手可及

从“专机专用”到“通用智能”,宝维塔以精密组装为切入点,将通用具身智能从前沿技术概念,转化为可落地、可规模化复制的智造解决方案。简单来说,这套系统相当于给机器装上一副“仿生人眼”,能完整看清零件的立体外形,精准判断出零件的空间位置、摆放角度和状态,让机械臂精准知道零件在哪里、是什么姿势、该从哪里抓取。,比如“抓取右侧那个透明的圆形接头”,机械臂便能自主理解语义、识别目标、规划路径并避开障碍,一气呵成完成抓取。,无论是螺丝锁付、插拔装配、点胶贴合还是线束组装,都能快速适配,一台设备通吃多种工艺。

206

WAIC 2026 | 移远轮臂式具身机器人平台登场:让机器人“想明白、反应快、拿得稳”

7月19日,上海,2026世界人工智能大会(WAIC)移远展台现场。只需一个简单指令“给我一瓶XX饮料”——机器人识别、抓取、递送,一气呵成。不用重复指令,也不必靠遥控器“手把手”教学。它自己“理解透”你的需求,“看清楚”饮料在哪,“想明白”怎么伸手,“拿捏准”每一丝力道。从语音到动作,从意图到执行,这台机器人完成了一次完整的自主智能闭环。

398

跨越端侧AI落地鸿沟:移远通信大模型方案全面升级,重塑交互与效能

面对端侧AI大模型全面爆发的市场需求,如何帮助客户高效落地并抢占AI先机,已成为行业的核心命题。在WAIC 2026(世界人工智能大会)期间,为行业打通AI商业化落地“最后一公里”提供了全新思路。移远AI前沿技术中心总负责人王韬表示:“当整个行业都在为参数突破而欢呼时,我们选择了一条更务实的路——沉下心来,在端侧大模型领域持续深耕。因为我们深知,技术的终极意义不在于跑分,而在于落地。

196

WAIC 2026 | 移远SleepHub首发:以声学AI重新定义智能电动床交互体验

7月17日,2026世界人工智能大会(WAIC)在上海盛大启幕,。这套方案专门为电动床品牌与制造厂商打造,采用。其内置VA501语音模组,提供丰富的离线语音交互功能,不仅支持连续对话、深度定制指令词、主被动语音播报,还自带鼾声检测、双区空间识别与床体姿态联动能力。简言之,SleepHub为电动床厂商提供了一套“听得懂指令、能主动守护”的语音交互中枢,帮助产品快速实现智能化升级。随着睡眠健康消费持续升级,电动床正从单一机械调节,向智能化、个性化交互快速演进。

318

音频的驱动

音频校准工具可调整内置 codec 输入增益(包含模拟增益,adc增益),输出增益(包含模拟增益,dac增益,算法增益),侧音增益。生效模式分为实时生效模式,和非实时生效模式,通过 API控制。其中非实时生效模式下,调整的参数将会在下次播放/通话时才能生效。工具可适配整多种应用场景,和多种输入/输出通道。音频工具调整好参数后,可以直接固定到NV文件中,作为默认音频参数。

232

移远通信全面入局XR:发布Hawk+Dolphin产品矩阵,打通XR从参考设计到规模量产的最后一公里

而对于XR,我们坚定地相信,下一代人机交互的核心入口,将是我们的眼睛。面对消费级用户与垂直行业提出的近乎苛刻的新要求——产品要好、速度要快、供应要强,移远提出了"0-1、1-N、1+N"三维能力框架——聚焦XR软硬件参考设计与定义,解决规模化阶段的精密制造与交付速度,以及提供全产业链生态整合服务。算力单元不仅可与AR眼镜连接,提供丰富的OS资源和AI交互能力(以Agent为中心的意图控制与指令交互),还可通过有线或无线方式连接3D头显、显示器等更多种类终端,大大拓展应用场景,成为工作生活中的智能助手。

426

移远这项“小而美”的技术,拿下汽车电子大奖!

同时,它全面支持n41/n77/n78/n79等5G核心频段(覆盖国内主流运营商)和全频段的天线调谐,无论车辆行驶在隧道、山区还是城市密集区,都能保持高速率、低延迟、高可靠的稳定连接。这项技术的“含金量”究竟体现在哪?简单来说,传统射频方案好比买了一套功能繁多的“豪华工具箱”——虽然什么都能干,但车企实际只用到其中几样,却要承担高昂的成本和冗余的功耗。移远通信将继续以硬核创新为引擎,携手产业链伙伴,推动5G车载通信从“高端选配”加速迈向“规模标配”“深度定制”,共同奔赴智能出行新未来。

211

MWC26上海 | 移远RG155UC-CN:突破性架构精裁,成就5G RedCap“质优价更轻”

6月26日,在MWC26上海展会期间,作为面向RedCap场景深度定制的标杆模组,RG155UC-CN真正实现“轻量5G,硬核性能”。产品以三大核心优势,全方位解决传统5G模组尺寸偏大、功耗偏高、场景适配受限等行业痛点,为等海量轻量化终端提供高性价比、高效率的5G规模化落地全新方案,推动5G RedCap全面迈入普惠商用新阶段。

369

MWC26上海直击!移远割草机器人解决方案:让庭院作业“智”在必得

6月25日,在MWC26上海展会期间,当前,家用与商用智能割草机器人市场迎来规模化增长,行业竞争日趋白热化,各大厂商对产品快速落地、性能稳定可靠、高性价比的需求达到前所未有的高度。在此背景下,一套兼顾高效、优质、高性价比的全链路解决方案,已然成为决胜市场的关键。过去,开发一个新机型往往需要从底层硬件做起,从零开始进行系统设计、硬件搭建与调试,周期长、投入大。移远的破局之道在于“积木式”模块化设计。

217

数码管-应用

数码管/LED 点阵是嵌入式系统中常见的显示方案,该方案比 LCD 显示屏占用更少的引脚和内存资源,实现也更加简单,比较适合计时、计数、状态显示等具有单一显示需求的应用场景。数码管主要有 LED 数码管、LCD 数码管和 VFD 数码管等类型。

208

MWC26上海 | 移远首款MediaTek平台旗舰级AI算力模组震撼登场

6月25日,在MWC26上海展会期间,,打通了高阶AI算力向千行百业端侧渗透的关键脉络。,广泛适用于等高端场景,助力客户在边缘计算与AI原生应用浪潮中抢占先机。MediaTek物联网事业部总经理王镇国表示:“移远是MediaTek长期信赖的战略合作伙伴,此次作为MediaTek Genio Pro 旗舰平台的首批客户深度参与联合研发,意义深远。

357

触摸屏-应用

驱动中已经集成了电阻触摸屏的校准算法,校准过程屏幕会点亮四个点,依次点击来校准,采集数据进行数据比对,误差太大则点击失败,重新点击。调用校准函数 xtp2046.adjust()将会在屏幕上开始校准的过程,校准完成后,将参数保存在文件中,下次初始化 xtp2046 时读取校准数据,避免每次使用前的重复校准。触摸屏的分辨率设置也是很重要的,因为触摸屏旋转后的换算依赖于触摸屏的宽和高分辨率大小,设置不当将无法得到正确的旋转效果。每种类型的触摸屏都有其优点和适用的场合,选择哪种类型主要取决于具体的应用需求。

265

显示器-调试

请参考LCM 接口 API和SPI LCD 接口 API。lcd.mipi_init 接口原型参数类型说明initbufbytearray必传,传入 MIPI 的配置命令widthint缺省值:480,屏幕的宽度,单位像素,示例:width=400hightint缺省值:854,屏幕的高度,单位像素,示例:hight=800bppint缺省值:16,像素深度DataLaneint缺省值:2,数据通道MipiModeint。

268

通过AEC-Q104测试!移远5G+AI智能座舱模组以硬核实力领跑赛道

AEC-Q104是由汽车电子协会(AEC)制定的针对车载多芯片模块(MCM)的可靠性测试标准,覆盖极端高低温、温度冲击、振动、机械冲击等多维严苛测试,是车载电子进入前装供应链的核心准入门槛。而AS830M可彻底改变这一局面,减轻客户的重复测试负担,显著降低系统失效风险与供应链管理成本,有效缩短前装量产周期,助力高端智能座舱快速、安全落地。未来,移远通信将持续推进不同算力规格舱联模组的AEC-Q104合规测试,助力汽车行业域控融合,为客户提供更多优质的舱联解决方案。

279

锚定AI原生新赛道!移远携全系车载方案闪耀2026高通汽车峰会

6月4-5日,以“智启新程”为主题的2026高通汽车技术与合作峰会在无锡国际会议中心盛大举行。全球整车厂、Tier 1及产业链领军企业齐聚一堂,共探智能汽车产业新趋势。会上,发表致辞。孟樸指出,汽车正从交通工具演变为高度智能化、持续进化的移动空间,并将进一步成为智能体A最重要的移动载体之一,能够感知环境、理解用户、协同服务。2026年已进入“智能体之年”,AI智能体正推动人机交互与设备协同迈向新阶段。高通凭借从终端到数据中心的跨层级系统能力,让智能无处不在、触手可及。

321

显示器-应用

对屏幕进行分类的讨论将有助于我们对驱动的理解,这里将按照屏幕可显示的色彩来分类,而非 OLED、LCD 等屏幕的面板材料。旋转了屏幕后,显示内容不见了。这可能是因为屏幕面板的分辨率小于屏幕控制器的分辨率,导致旋转后显示区域没有完全落在屏幕面板上,这时应考虑设置正确的显示区域偏移。现代显示器的种类非常多样化,它们用于各种不同的设备和应用,从个人计算机到商业广告屏,从手机到电视,从游戏设备到嵌入式设备等。嵌入式系统中的显示器需求可能会根据具体的应用和性能需求有所不同,因此选择适合的显示器类型是非常重要的。

339

USB应用指导

当设备被连接到主机时,设备控制器驱动需要识别这个事件,并响应主机的初始化请求,例如提供设备描述符(Device Descriptor),这是一个描述设备特性(例如设备类型、制造商ID、产品ID等)的数据结构。蜂窝通信模组作为一个USB设备(或称为USB从设备,USB Device),可以通过USB接口连接到主机(比如PC或嵌入式主控板)。以上的速率都是理论上的最高值,在实际应用中,由于各种原因(包括但不限于USB控制器的性能,设备的性能,线缆的质量,以及系统的负载等),实际的传输速率可能会低于这些值。

266

ADC-应用

因此,一个8位的ADC可以将输入范围分成2的8次方(256)个不同的离散级别,而一个12位的ADC可以将输入范围分成2的12次方(4096)个离散级别。检测电池电压的原理是采用电阻分压的方法,即硬件上用两个电阻把电池电压进行比例分压,把分压后的电压送到模组ADC管脚进行检测,软件根据模组ADC读取的电压值经过换算计算出电池的电压。连接硬件:如下图所示,ME4055A的CHRG和STDBY分别接模组的GPIO,BAT接电池正极,VCC接电源,通过把电池电压分压,接入到模组的ADC管脚,以测量电池电压。

256

PWM- 脉宽调制

对于直流电机来讲,当给电机提供电源时,电机会转动,但是是一点一点的提速,在突然停止供电给电机供电时,电机由于电感有防止电流突变的作用是不会停止的,会保持这原有的转速,以此往复,电机的转速就是周期内输出的平均电压值,所以实质上我们调速是将电机处于一种,似停非停,似全速转动又非全速转动的状态,那么在一个周期的平均速度就是我们占空比调出来的速度了。上图中,T 表示周期,W 表示脉宽,ton 是高电平阶段,toff 是低电平阶段,则 T=ton+toff,频率 f=1/T,占空比=W/T。

347

SPI-概述

SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线。SPI使用了主设备和从设备的概念。在任何给定的SPI通信中,有一个主设备和一个或多个从设备。主设备负责启动和结束通信会话。

401
上一篇: 短信-概念
下一篇: USB 应用指导
移远通信
移远通信 企业官方账号 企业官方账号
博客等级 码龄7年 1519粉丝 516原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值