【移远QuecPython】EC800M物联网开发板的内置GNSS定位获取(北斗、GPS和GNSS)

这篇具有很好参考价值的文章主要介绍了【移远QuecPython】EC800M物联网开发板的内置GNSS定位获取(北斗、GPS和GNSS)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【移远QuecPython】EC800M物联网开发板的内置GNSS定位获取(北斗、GPS和GNSS)

测试视频(其中的恶性BUG会在下一篇文章阐述):

【移远QuecPython】EC800M物联网开发板的内置GNSS定位的恶性BUG(目前没有完全的解决方案)


GNSS初始化

内置的GNSS就是通过插入的GPS天线直接定位
移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu

def GNSS_Init():
    ret = quecgnss.init()
    if ret == 0:
        print('GNSS init ok.')
    else:
        print('GNSS init failed.')
        return -1
    ret = quecgnss.get_state()
    if ret == 2:
        print(True)

通过函数quecgnss.init()可以进行初始化和上电
这里上电以后 大约3秒就可以读数据 但是读到的数据不是有效数据
需要过大约30秒才能得到有效数据

同时可以获取到工作状态

quecgnss.get_state()

返回值描述

返回值 类型 说明
0 int GNSS模块处于关闭状态
1 int GNSS模块固件升级中
2 int GNSS模块定位中,这种模式下即可开始读取GNSS定位数据,定位数据是否有效需要用户获取到定位数据后,解析对应语句来判断,比如判断GNRMC语句的status是 A 还是 V,A 表示定位有效,V 表示定位无效。

上电后 不需要调用quecgnss.gnssEnable(opt)函数来开启
另外 如果手动关闭以后 再次打开也需要等待30s才能读到有效数据 所以不要频繁打开、关闭

GNSS读取

使用函数quecgnss.read(size)直接读取定位坐标信息
坐标格式为NMEA-0183协议
比如:

$GNRMC,032220.291,V,,,,,0.00,0.00,140716,,,N*5D
$GNVTG,0.00,T,,M,0.00,N,0.00,K,N*2C
$GNGGA,032220.291,,,,,0,0,,,M,,M,,*5D
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$BDGSA,A,1,,,,,,,,,,,,,,,*0F
$GPGSV,2,1,07,23,,,31,08,,,49,30,,,33,16,,,45*7E
$GPGSV,2,2,07,07,,,44,27,,,49,26,,,43*72
$BDGSV,1,1,03,10,,,47,04,,,40,07,,,48*62
$GNGSA,A,3,31,32,3,16,22,25,26,,,,,,1.837,1.120,1.456*11
$GNGSA,A,3,163,166,167,169,170,,,,,,,,1.837,1.120,1.456*18
$GPGSV,2,1,8,3,23,302,27,16,32,220,26,22,73,101,27,25,16,43,27*45
$GPGSV,2,2,8,26,70,237,28,31,59,13,33,32,54,128,28,4,5,,24*44
$BDGSV,2,1,8,163,51,192,33,166,71,11,35,167,52,198,33,169,59,334,34*6E
$BDGSV,2,2,8,170,40,205,32,161,5,,33,164,5,,28,165,5,,30*5F
$GNRMC,022507.000,A,3149.324768,N,11706.922344,E,0.000,261.541,180222,,E,A*31
$GNGGA,022507.000,3149.324768,N,11706.922344,E,1,12,1.120,-8.794,M,0,M,,*48
$GNGLL,3149.324768,N,11706.922344,E,022507.000,A,A*4D
$GNGSA,A,3,31,32,3,16,22,25,26,,,,,,1.837,1.120,1.455*12
$GNGSA,A,3,163,166,167,169,170,,,,,,,,1.837,1.120,1.455*1B
$GPGSV,2,1,8,3,23,302,26,16,32,220,26,22,73,101,27,25,16,43,26*45
$GPGSV,2,2,8,26,70,237,28,31,59,13,32,32,54,128,28,4,5,,24*45
$BDGSV,2,1,8,163,51,192,24,166,71,11,35,167,52,198,33,169,59,334,34*68
$BDGSV,2,2,8,170,40,205,31,161,5,,33,164,5,,28,165,5,,30*5C
$GNRMC,022508.000,A,3149.324754,N,11706.922338,E,0.002,261.541,180222,,E,A*38
$GNGGA,022508.000,3149.324754,N,11706.922338,E,1,12,1.120,-8.750,M,0,M,,*4B

等等

其中:
序号 命令 说明

1 $*GGA 卫星定位信息

2 $*GSA 卫星PRN数据

3 $*GSV 可视卫星信息

4 $*RMC 推荐定位信息

5 $*VTG 地面速度信息

6 $*GLL 地理定位信息

7 $*GPZDA UTC时间和日期

GPGSV:可见卫星信息
GPGLL:地理定位信息
GPRMC:推荐最小定位信息
GPVTG:地面速度信息
GPGGA:GPS定位信息
GPGSA:当前卫星信息

如:

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh #最小定位信息
	<1> UTC 时间,hhmmss(时分秒)格式
  <2> 定位状态,A=有效定位,V=无效定位
  <3>纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
  <4> 纬度半球N(北半球)或S(南半球)
  <5>经度dddmm.mmmm(度分)格式(前面的0也将被传输)
  <6> 经度半球E(东经)或W(西经)
  <7>地面速率(000.0~999.9节,前面的0也将被传输)
  <8>地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
  <9> UTC 日期,ddmmyy(日月年)格式
  <10>磁偏角(000.0~180.0度,前面的0也将被传输)
  <11> 磁偏角方向,E()或W(西)
  <12>模式指示(仅NMEA01833.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

具体就需要大家自己根据需求去获取了

读取函数:

def GNSS_Read():
    data = quecgnss.read(1024)
    data_gnss = data[1].decode()
    if len(data_gnss)==0:
        print("None Data")
    else:
        print("Get Data")
        #print(data_gnss)
        data1 = re.search("GNRMC(.+?)M", data_gnss)
        deta2 = re.search("GPGSV(.+?)M", data_gnss)
        deta3 = re.search("BDGSV(.+?)M", data_gnss)
        data4 = re.search("GNGGA(.+?)M", data_gnss)
        try:
            if data1.group(0).split(",")[2] == 'A': 
                print("Available Data")           
                li=[data4.group(0).split(",")[2],data4.group(0).split(",")[3],data4.group(0).split(",")[4],data4.group(0).split(",")[5]]
                print(li)
                lat0=int(int(float(li[0]))/100)
                lat1=int(int(float(li[0]))%100)
                lat2=int(li[0].split(".")[1])
                lon0=int(int(float(li[2]))/100)
                lon1=int(int(float(li[2]))%100)
                lon2=int(li[2].split(".")[1])
                lat_d=str(lat0)
                lat_m=str(lat1)+"."+str(lat2)
                lon_d=str(lon0)
                lon_m=str(lon1)+"."+str(lon2)
                return lat_d,lat_m,li[1],lon_d,lon_m,li[3]
        except:
            pass

这里用到了正则表达式来搜素相关关键字
我最后用到的信息是GNGGA信息
然后根据格式来进行转换 得到一个列表定位信息

测试效果

调用时 直接死循环调用即可

while True:
        #date=time.localtime()
        #print("{0}-{1}-{2} {3}:{4}:{5}".format(date[0],date[1],date[2],date[3],date[4],date[5]))
        print(i)        
        result = GNSS_Read()
        if result:
            print(result)
            huart2.write(str(result))

        i=i+1
        time.sleep(1)
        pass

移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu
完整代码:

# -*- coding: utf-8 -*-

from machine import Pin
from machine import UART
from machine import WDT
import utime as time
import uos as os
import quecgnss
import ure as re

net_led = Pin(Pin.GPIO36, Pin.OUT,Pin.PULL_PD,0)
huart2 = UART(UART.UART2, 115200, 8, 0, 1, 0)
def led_warning_task():
    for i in range(5):
        net_led.value(1)
        time.sleep(0.5)
        net_led.value(0)
        time.sleep(0.5)

def UART2_Read_Callback(para):    
    if para[0] == 0:
        if para[1]==2:
            data=huart2.read(para[2])
            str=data.decode()
            print(str)
            

def UART2_Init():
    huart2.set_callback(UART2_Read_Callback)

def GNSS_Read():
    data = quecgnss.read(1024)
    data_gnss = data[1].decode()
    if len(data_gnss)==0:
        print("None Data")
    else:
        print("Get Data")
        #print(data_gnss)
        data1 = re.search("GNRMC(.+?)M", data_gnss)
        deta2 = re.search("GPGSV(.+?)M", data_gnss)
        deta3 = re.search("BDGSV(.+?)M", data_gnss)
        data4 = re.search("GNGGA(.+?)M", data_gnss)
        try:
            if data1.group(0).split(",")[2] == 'A': 
                print("Available Data")           
                li=[data4.group(0).split(",")[2],data4.group(0).split(",")[3],data4.group(0).split(",")[4],data4.group(0).split(",")[5]]
                print(li)
                lat0=int(int(float(li[0]))/100)
                lat1=int(int(float(li[0]))%100)
                lat2=int(li[0].split(".")[1])
                lon0=int(int(float(li[2]))/100)
                lon1=int(int(float(li[2]))%100)
                lon2=int(li[2].split(".")[1])
                lat_d=str(lat0)
                lat_m=str(lat1)+"."+str(lat2)
                lon_d=str(lon0)
                lon_m=str(lon1)+"."+str(lon2)
                return lat_d,lat_m,li[1],lon_d,lon_m,li[3]
        except:
            pass

def GNSS_Init():
    ret = quecgnss.init()
    if ret == 0:
        print('GNSS init ok.')
    else:
        print('GNSS init failed.')
        return -1
    ret = quecgnss.get_state()
    if ret == 2:
        print(True)
    
def Set_spk():
    while True:
        spk.value(1)
        spk.value(0)
def main():
    time.sleep(1)
    print('system info:{}'.format(os.uname()))
    Set_spk()
    UART2_Init()
    GNSS_Init()
    i=0
    while True:
        #date=time.localtime()
        #print("{0}-{1}-{2} {3}:{4}:{5}".format(date[0],date[1],date[2],date[3],date[4],date[5]))
        print(i)        
        result = GNSS_Read()
        if result:
            print(result)
            huart2.write(str(result))

        i=i+1
        time.sleep(1)
        pass

if __name__ == '__main__':
    main()


    

函数打包

# -*- coding: utf-8 -*-
import quecgnss
import ure as re

def GNSS_Read():
    data = quecgnss.read(1024)
    data_gnss = data[1].decode()
    if len(data_gnss)==0:
        print("None Data")
    else:
        print("Get Data")
        #print(data_gnss)
        data1 = re.search("GNRMC(.+?)M", data_gnss)
        deta2 = re.search("GPGSV(.+?)M", data_gnss)
        deta3 = re.search("BDGSV(.+?)M", data_gnss)
        data4 = re.search("GNGGA(.+?)M", data_gnss)
        try:
            if data1.group(0).split(",")[2] == 'A': 
                print("Available Data")           
                li=[data4.group(0).split(",")[2],data4.group(0).split(",")[3],data4.group(0).split(",")[4],data4.group(0).split(",")[5]]
                print(li)
                lat0=int(int(float(li[0]))/100)
                lat1=int(int(float(li[0]))%100)
                lat2=int(li[0].split(".")[1])
                lon0=int(int(float(li[2]))/100)
                lon1=int(int(float(li[2]))%100)
                lon2=int(li[2].split(".")[1])
                lat_d=str(lat0)
                lat_m=str(lat1)+"."+str(lat2)
                lon_d=str(lon0)
                lon_m=str(lon1)+"."+str(lon2)

                lat=float(lat_m)/60+float(lat_d)
                lon=float(lon_m)/60+float(lon_d)

                return lon,lat
        except Exception as e:
            print("GNSS Error",e)
            pass
    return None

def GNSS_Init():
    ret = quecgnss.init()
    if ret == 0:
        print('GNSS init ok.')
    else:
        print('GNSS init failed.')
        return -1
    ret = quecgnss.get_state()
    if ret == 2:
        return 1
    else:
        return 0

附录:列表的赋值类型和py打包

列表赋值

BUG复现

闲来无事写了个小程序 代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Nov 19 19:47:01 2021

@author: 16016
"""

a_list = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15']
#print(len(a_list))
#b_list = ['','','','','','','','','','','','','','','','']
c_list = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
#for i in range(16):
if len(a_list):
    for j in range(16):
        a_list[j]=str(a_list[j])+'_'+str(j)
        print("序号:",j)
        print('a_list:\n',a_list)
        
        
        c_list[j]=a_list
        print('c_list[0]:\n',c_list[0])
        print('\n')
#        b_list[j]=a_list[7],a_list[8]
#        print(b_list[j])
        # 写入到Excel:
#print(c_list,'\n')    

我在程序中 做了一个16次的for循环 把列表a的每个值后面依次加上"_"和循环序号
比如循环第x次 就是把第x位加上_x 这一位变成x_x 我在输出测试中 列表a的每一次输出也是对的
循环16次后列表a应该变成[‘0_0’, ‘1_1’, ‘2_2’, ‘3_3’, ‘4_4’, ‘5_5’, ‘6_6’, ‘7_7’, ‘8_8’, ‘9_9’, ‘10_10’, ‘11_11’, ‘12_12’, ‘13_13’, ‘14_14’, ‘15_15’] 这也是对的

同时 我将每一次循环时列表a的值 写入到空列表c中 比如第x次循环 就是把更改以后的列表a的值 写入到列表c的第x位
第0次循环后 c[0]的值应该是[‘0_0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘10’, ‘11’, ‘12’, ‘13’, ‘14’, ‘15’] 这也是对的
但是在第1次循环以后 c[0]的值就一直在变 变成了c[x]的值
相当于把c_list[0]变成了c_list[1]…以此类推 最后得出的列表c的值也是每一项完全一样
我不明白这是怎么回事
我的c[0]只在第0次循环时被赋值了 但是后面它的值跟着在改变

如图:
移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu
第一次老出bug 赋值以后 每次循环都改变c[0]的值 搞了半天都没搞出来
无论是用appen函数添加 还是用二维数组定义 或者增加第三个空数组来过渡 都无法解决

代码改进

后来在我华科同学的指导下 突然想到赋值可以赋的是个地址 地址里面的值一直变化 导致赋值也一直变化 于是用第二张图的循环套循环深度复制实现了

代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Nov 19 19:47:01 2021

@author: 16016
"""

a_list = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15']
#print(len(a_list))
#b_list = ['','','','','','','','','','','','','','','','']
c_list = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
#for i in range(16):
if len(a_list):
    for j in range(16):
        a_list[j]=str(a_list[j])+'_'+str(j)
        print("序号:",j)
        print('a_list:\n',a_list)
        
        
        for i in range(16):
            c_list[j].append(a_list[i])
        print('c_list[0]:\n',c_list[0])
        print('\n')
#        b_list[j]=a_list[7],a_list[8]
#        print(b_list[j])
        # 写入到Excel:
print(c_list,'\n')    

解决了问题

移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu

优化

第三次是请教了老师 用copy函数来赋真值

代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri Nov 19 19:47:01 2021

@author: 16016
"""

a_list = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15']
#print(len(a_list))
#b_list = ['','','','','','','','','','','','','','','','']
c_list = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
#for i in range(16):
if len(a_list):
    for j in range(16):
        a_list[j]=str(a_list[j])+'_'+str(j)
        print("序号:",j)
        print('a_list:\n',a_list)
        
        
        c_list[j]=a_list.copy()
        print('c_list[0]:\n',c_list[0])
        print('\n')
#        b_list[j]=a_list[7],a_list[8]
#        print(b_list[j])
        # 写入到Excel:
#print(c_list,'\n')    

同样能解决问题
移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu
最后得出问题 就是指针惹的祸!

a_list指向的是个地址 而不是值 a_list[i]指向的才是单个的值 copy()函数也是复制值而不是地址

如果这个用C语言来写 就直观一些了 难怪C语言是基础 光学Python不学C 遇到这样的问题就解决不了

C语言yyds Python是什么垃圾弱智语言

总结

由于Python无法单独定义一个值为指针或者独立的值 所以只能用列表来传送
只要赋值是指向一个列表整体的 那么就是指向的一个指针内存地址 解决方法只有一个 那就是将每个值深度复制赋值(子列表内的元素提取出来重新依次连接) 或者用copy函数单独赋值

如图测试:
移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu
移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu
移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu
移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu
移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu
部分代码:

# -*- coding: utf-8 -*-
"""
Created on Sat Nov 20 16:45:48 2021

@author: 16016
"""

def text1():
    A=[1,2,3]
    B=[[],[],[]]
    for i in range(len(A)):
        A[i]=A[i]+i
        B[i]=A
        print(B)

def text2():
    A=[1,2,3]
    B=[[],[],[]]
    
    A[0]=A[0]+0
    B[0]=A
    print(B)
    A[1]=A[1]+1
    B[1]=A
    print(B)
    A[2]=A[2]+2
    B[2]=A
    print(B)
    
if __name__ == '__main__':
    text1()
    print('\n')
    text2()

py打包

Pyinstaller打包exe(包括打包资源文件 绝不出错版)

依赖包及其对应的版本号

PyQt5 5.10.1
PyQt5-Qt5 5.15.2
PyQt5-sip 12.9.0

pyinstaller 4.5.1
pyinstaller-hooks-contrib 2021.3

Pyinstaller -F setup.py 打包exe

Pyinstaller -F -w setup.py 不带控制台的打包

Pyinstaller -F -i xx.ico setup.py 打包指定exe图标打包

打包exe参数说明:

-F:打包后只生成单个exe格式文件;

-D:默认选项,创建一个目录,包含exe文件以及大量依赖文件;

-c:默认选项,使用控制台(就是类似cmd的黑框);

-w:不使用控制台;

-p:添加搜索路径,让其找到对应的库;

-i:改变生成程序的icon图标。

如果要打包资源文件
则需要对代码中的路径进行转换处理
另外要注意的是 如果要打包资源文件 则py程序里面的路径要从./xxx/yy换成xxx/yy 并且进行路径转换
但如果不打包资源文件的话 最好路径还是用作./xxx/yy 并且不进行路径转换

def get_resource_path(relative_path):
    if hasattr(sys, '_MEIPASS'):
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath("."), relative_path)

而后再spec文件中的datas部分加入目录
如:

a = Analysis(['cxk.py'],
             pathex=['D:\\Python Test\\cxk'],
             binaries=[],
             datas=[('root','root')],
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

而后直接Pyinstaller -F setup.spec即可

如果打包的文件过大则更改spec文件中的excludes 把不需要的库写进去(但是已经在环境中安装了的)就行

这些不要了的库在上一次编译时的shell里面输出
比如:
移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu

移远ec800e定位,移远QuecPython笔记,物联网,单片机,iot,嵌入式,mcu
然后用pyinstaller --clean -F 某某.spec文章来源地址https://www.toymoban.com/news/detail-823792.html

到了这里,关于【移远QuecPython】EC800M物联网开发板的内置GNSS定位获取(北斗、GPS和GNSS)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2-远程升级篇(自建物联网平台)-STM32通过EC800使用http或https下载程序文件升级程序(APP通过MQTT控制单片机更新)

    1,用户在APP上点击 \\\"固件升级\\\" 按钮, APP使用MQTT发送:  {\\\"data\\\":\\\"updata\\\",\\\"cmd\\\":\\\"DeviceInfo\\\"} //询问设备固件信息 2,设备通过MQTT收到该消息以后,发送 {\\\"data\\\":\\\"updata\\\",\\\"cmd\\\":\\\"DeviceInfo\\\",\\\"DeviceModel\\\":\\\"STM32EC800BKAPP\\\",\\\"FirmwareVersion\\\":\\\"0.0.0\\\"} (STM32EC800BKAPP是设备的型号;  0.0.0是设备当前的固件版本) 3,APP收到

    2024年04月16日
    浏览(131)
  • 移远4G模块 EC200x EC600 系列AT命令手册

    本文是译至移远官方文档 xxx_AT_Commands_Manual 这款芯片的AT命令集是遵循国际标准3GPPTS27.007、3GPPTS27.005以及Quectel开发的专用AT命令的组合。 AT命令要以前缀的“AT”或“at”为每个命令行的开头,以回车符号为每行结尾。命令后面通常会有一个响应,其中包括“”。在本文档中,

    2024年02月09日
    浏览(33)
  • 移远EC20设置RNDIS模式拨号上网

    4G模块原本使用QMI方式拨号上网,客户反馈某种定制卡不能上网,切换下拨号模式看下设备能不能正常上网; openwrt中如果使用RNDIS模式上网需要在kernel配置中使能以下项: EC20有4种上网模式: 0 RMNET接口,通过QMI工具发的QMI命令,获取公网IP。 1 ECM接口,通过标准的CDC-ECM发起

    2024年02月11日
    浏览(102)
  • 移植移远4G模块EC20过程记录3-EC20模块固件升级以适配QMI拨号

    目录 EC20模块固件升级步骤 1、交叉编译升级工具QFirehose 2、将工具QFirehose和待升级的固件EC20CEHDLGR06A09M1G.zip拷贝到板子上 3、在板上解压固件压缩包 4、升级 5、修改Gobinet源码以适配新固件 固件版本低于A08的均不能进行Gobinet拨号上网 源码是QFirehose_Linux_Android_V1.4.9.zip, 解压后

    2024年02月10日
    浏览(28)
  • 移远EC20 WINDOWS下安装驱动及开机自动拨号上网

    1、下载安装驱动文件 Quectel_LTE5G_Windows_USB_Driver_V2.2.6_beta_20201230 上链接   驱动文件 https://download.csdn.net/download/weixin_38420901/87635376 2、使用QCOM AT指令工具设置测试模块  QCOM_V1.6 上链接  QCOM软件 https://download.csdn.net/download/weixin_38420901/87635361

    2024年02月08日
    浏览(124)
  • OpenHarmony3.1适配移远EC20模组4G上网功能

    通过阅读本篇文档,您将学习到如何适配移远EC20模组到OpenHarmony3.1(以下简称OHOS),并添加4G上网功能。 本篇文档,使用硬件为大禹RK3568开发板。 开发板资料:https://gitee.com/openharmony/device_board_hihope/blob/master/rk3568/README_zh.md 软件方案分为PPP和QMI两种,请读者自行选择。 2.1.内

    2024年02月06日
    浏览(29)
  • 移远通信携手MIKROE推出搭载LC29H系列模组的Click boards开发板,为物联网应用带来高精定位服务

    近日,移远通信与MikroElektronika(以下简称“MIKROE”)展开合作,基于移远LC29H系列模组推出了多款支持实时动态载波相位差分技术(RTK)和惯性导航(DR)技术的 Click Boards™ 开发板,为物联网设备带来使用简单、性价比高的厘米级高精定位服务。 开发板上搭载的LC29H是一系列

    2024年02月08日
    浏览(31)
  • 驱动程序开发:基于EC20 4G模块自动拨号联网的两种方式(GobiNet工具拨号和PPP工具拨号)

    与EC20 4G模组所需的文件,下载链接,请点击即可   关于 EC20 4G 模块的详细资料请找卖家索要!   EC20 有多种不同的配置,比如全网通纯数据版本、语音版、带 GNSS 版等等,建议大家购买的时候至少要选择全网通数据版,因为我们使用 4G 模块主要还是用于数据通信的。移远

    2023年04月26日
    浏览(30)
  • EC200 EC600 EC20接入工业互联网云平台

    第三方设备接入云盒子说明文档 注册工业互联网云   www.sukon-cloud.com 物联网云盒子能帮助用户迅速搭建好设备管理后台,适合系统集成等用户。 此文章的测试模块使用的是移远的EC600N https://item.taobao.com/item.htm?spm=a1z10.5-c-s.w4002-21884152640.30.ca3d5f90BWNYYoid=653613774417 移远系列的E

    2024年02月03日
    浏览(69)
  • 基于GEC6818开发板的相册

    1.图片的显示 2.上滑,下滑,左滑,右滑切换图片 3.幻灯片播放相册 4.显示图片的缩略图 pic.h main.c 获取滑动方向,控制图片切换 幻灯片播放 保存图片到链表 显示图片 触屏判断

    2024年02月12日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包