Skip to content

Commit e41142c

Browse files
authored
Merge pull request #1 from aaronchenzhihe/main
solution_sensorhub
2 parents a9582cb + 7fa2092 commit e41142c

27 files changed

+215
-37
lines changed

README.md

Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,103 @@
1-
# solution-Sensorhub
2-
海外 vSIM EVB 项目推广 example,硬件选型:EC200UEU + Sense HAT(B)
1+
# 快速上手
2+
3+
## 硬件准备
4+
5+
Windows电脑一台,建议 `Win10` 系统。
6+
7+
一套[EC200U-EU Quecpython 标准开发板](https://python.quectel.com/doc/Getting_started/zh/evb/ec200x-evb.html)(含天线,Type-C数据线)
8+
9+
一张能够正常使用的SIM卡
10+
11+
## 环境搭建
12+
13+
- 下载并安装EC200EU系列模组驱动:[QuecPython_USB_Driver_Win10_ASR](https://images.quectel.com/python/2023/04/Quectel_Windows_USB_DriverA_Customer_V1.1.13.zip)
14+
15+
16+
- 下载并安装 [VSCode](https://code.visualstudio.com/)
17+
- 下载并解压 [QPYCom](https://images.quectel.com/python/2022/12/QPYcom_V3.6.0.zip) 工具到电脑的合适位置。
18+
- 下载[固件包](../../solutions/SimpliKit/EC200UEUAAR05A01M08_TEST0222.zip )
19+
- 下载[实验源码](https://gitee.com/dustin-wei/solution-sensorhub)
20+
21+
## 硬件连接
22+
23+
按照下图硬件连接:
24+
25+
<img src="./media/EVB_link1.png" style="zoom: 25%;" /><img src="./media/EVB_link2.png" style="zoom: 20%;" />
26+
27+
28+
29+
1. 将天线连接至标识有 `LTE` 字样的天线连接座上。
30+
31+
2. 使用 Type-C 数据线连接开发板和电脑。
32+
33+
3. 在图示位置SIM1卡槽插入可用的 Nano SIM 卡
34+
35+
36+
37+
## 设备开发
38+
39+
- ### 开机
40+
41+
完成硬件连接工作后,当PWR,SCK1亮起或电脑设备管理器的端口列表出现包含Quectel USB字样的COM口,表示开机成功
42+
43+
<img src="./media/USB.png" />
44+
45+
46+
47+
- ### 烧录固件包
48+
49+
参考[此章节](https://python.quectel.com/doc/Application_guide/zh/dev-tools/QPYcom/qpycom-dw.html#下载固件),烧录[固件包](../../solutions/SimpliKit/EC200UEUAAR05A01M08_TEST0222.zip )至开发板。
50+
51+
- ### 脚本导入与运行
52+
53+
1.参考[此章节](https://python.quectel.com/doc/Getting_started/zh/first_python.html#PC与模组间的文件传输),将源码目录下的code文件夹中的所有文件按原目录结构导入到模组文件系统中,如下图所示
54+
55+
<img src="./media/Qpycom.png" />
56+
57+
2.参考[此章节](https://python.quectel.com/doc/Getting_started/zh/first_python.html#执行脚本文件),执行主程序文件_main.py
58+
59+
3.参考[此章节](https://python.quectel.com/doc/Getting_started/zh/first_python.html#停止程序运行),停止程序运行。
60+
61+
## 业务调试
62+
63+
### 程序启动
64+
65+
执行_main.py脚本后,程序开始运行,会打印拨号信息,包括拨号状态、IP地址、DNS服务器地址,设备号等
66+
67+
<img src="./media/drivers_data.png" />
68+
69+
### 🚩 **Warning**
70+
71+
未插入SIM卡时,SCK1灯不会亮起,并且无法打印设备信息,插入SIM卡并重启设备后即可正常运行。
72+
73+
<img src="./media/sim_erro.png" />
74+
75+
### 数据检测
76+
77+
开始运行后每1s会打印一次检测到的温度1,湿度,气压,温度2,颜色的三原色的数据,
78+
79+
<img src="./media/data.png" />
80+
81+
### 数据更新
82+
83+
当检测以上4种的任一数据产生大于1或者原色产生大于150的变化时就会尝试上传云端更新数据,当上传成功时返回“send ret:True”,并且会提示是哪些数据发生了变化,APP读取云端最新数据进行数据更新。
84+
85+
<img src="./media/data_up.png" />
86+
87+
<img src="./media/yun.png" />
88+
89+
如果数据没有大于1的变化就会只在pqcom中打印当前检测的数据,不会发起上传云端。
90+
91+
<img src="./media/data1.png" />
92+
93+
位置定位更新,当模组位移超过50米时,云端会刷新定位信息,app读取最新定位信息。
94+
95+
<img src="./media/gnss.png" />
96+
97+
主动刷新APP数据,通过点击APP右上角刷新按键,APP会向服务器发起主动读取数据的指令,用于主动更新面板数据
98+
99+
<img src="./media/APP.png" style="zoom: 67%;" />
100+
101+
温度,湿度,气压,颜色,Lbs数据被获取成功
102+
103+
<img src="./media/data_get.png" style="zoom: 100%;" />
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
| module | 描述|
2+
| --- | --- |
3+
|uzlib|zlib解压缩|
4+
|utime|时间相关功能|
5+
|uos|基本系统服务|
6+
|ujson|JSON编码和解码|
7+
|uhashlib|哈希算法|
8+
|urandom|生成随机数|
9+
|ubinascii|二进制与ASCLL转换|
10+
|umqtt|MQTT客户端|
11+
|_thread|多线程|
12+
|net|网络相关功能|
13+
|sim|SIM卡功能|
14+
|misc.Power|关机以及软件重启功能|
15+
|ql_fs|高级文件操作|
16+
|fota|fota升级|
17+
|app_fota_download|py脚本升级|
18+
|log|日志输出|
19+
|modem|设备相关|
20+
|queue|消息队列|
21+
|request|http客户端|
22+

code/_main.py

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
import net
21
import utime
3-
import checkNet
42
import dataCall
5-
from misc import Power
63
from usr.libs import Application
74
from usr.libs.logging import getLogger
85
from usr.extensions import (
@@ -16,23 +13,6 @@
1613
logger = getLogger(__name__)
1714

1815

19-
def wait_network_ready():
20-
for _ in range(3):
21-
logger.info("wait network ready...")
22-
code = checkNet.waitNetworkReady(300)
23-
if code == (3, 1):
24-
logger.info("network has been ready.")
25-
break
26-
else:
27-
logger.warn("network not ready, code: {}".format(code))
28-
net.setModemFun(0, 0)
29-
utime.sleep_ms(200)
30-
net.setModemFun(1, 0)
31-
else:
32-
logger.warn("power restart")
33-
Power.powerRestart()
34-
35-
3616
def create_app(name="SimpliKit", version="1.0.0", config_path="/usr/config.json"):
3717
_app = Application(name, version)
3818
_app.config.init(config_path)
@@ -46,9 +26,15 @@ def create_app(name="SimpliKit", version="1.0.0", config_path="/usr/config.json"
4626

4727

4828
if __name__ == "__main__":
49-
wait_network_ready()
29+
while True:
30+
lte = dataCall.getInfo(1, 0)
31+
if lte[2][0] == 1:
32+
logger.debug('lte network normal')
33+
break
34+
logger.debug('wait lte network normal...')
35+
utime.sleep(3)
5036

51-
dataCall.setPDPContext(1, 0, 'BICSAPN', '', '', 0) #激活之前,应该先配置APN,这里配置第1路的APN
37+
dataCall.setPDPContext(1, 0, 'BICSAPN', '', '', 0) # 激活之前,应该先配置APN,这里配置第1路的APN
5238
dataCall.activate(1)
5339

5440
app = create_app()

code/config.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
22
"QTH_PRODUCT_KEY": "pe16Db",
3-
"QTH_PRODUCT_SECRET": "ZGZMQWQ3QkVyN2Jm"
3+
"QTH_PRODUCT_SECRET": "ZGZMQWQ3QkVyN2Jm",
4+
"QTH_SERVER": "mqtt://iot-south.acceleronix.io:1883"
45
}

code/config2.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"QTH_PRODUCT_KEY": "pe17gQ",
3+
"QTH_PRODUCT_SECRET": "REdmNmlMRS8yUmNi",
4+
"QTH_SERVER": "mqtt://iot-south.quectelcn.com:1883"
5+
}

code/extensions/gnss_service.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from usr.libs import CurrentApp
44
from usr.libs.threading import Thread
55
from usr.libs.logging import getLogger
6+
import _thread
7+
from .import qth_client
68
try:
79
from math import sin, asin, cos, radians, fabs, sqrt
810
except:
@@ -188,6 +190,7 @@ def start_update(self):
188190
lng = lng_high + lng_low
189191
if nmea_tuple[5] == "W":
190192
lng = -lng
193+
191194
break
192195

193196
if nmea_data is not None:
@@ -218,3 +221,5 @@ def start_update(self):
218221
else:
219222
logger.error("send gnss to qth server fail")
220223
utime.sleep(3)
224+
225+

code/extensions/lbs_service.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from usr.libs import CurrentApp
44
from usr.libs.threading import Thread
55
from usr.libs.logging import getLogger
6-
6+
import _thread
77

88
logger = getLogger(__name__)
99

@@ -57,3 +57,25 @@ def start_update(self):
5757

5858
logger.debug("send lbs data to qth server success, next report will be after 1800 seconds")
5959
utime.sleep(1800)
60+
61+
def put_lbs(self):
62+
while True:
63+
lbs_data = self.read()
64+
if lbs_data is None:
65+
utime.sleep(2)
66+
continue
67+
68+
for _ in range(3):
69+
with CurrentApp().qth_client:
70+
if CurrentApp().qth_client.sendLbs(lbs_data):
71+
break
72+
else:
73+
logger.debug("send lbs data to qth server fail, next report will be after 2 seconds")
74+
utime.sleep(2)
75+
continue
76+
77+
logger.debug("send LBS data to qth server success")
78+
break
79+
80+
81+

code/extensions/qth_client.py

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from usr.libs.threading import Lock
22
from usr.libs.logging import getLogger
33
from usr import Qth
4-
5-
4+
from usr.libs import CurrentApp
5+
from . import lbs_service
66
logger = getLogger(__name__)
77

88

@@ -24,7 +24,7 @@ def init_app(self, app):
2424
app.register("qth_client", self)
2525
Qth.init()
2626
Qth.setProductInfo(app.config["QTH_PRODUCT_KEY"], app.config["QTH_PRODUCT_SECRET"])
27-
Qth.setServer('mqtt://iot-south.acceleronix.io:1883')
27+
Qth.setServer(app.config["QTH_SERVER"])
2828
Qth.setEventCb(
2929
{
3030
"devEvent": self.eventCallback,
@@ -47,7 +47,6 @@ def start(self):
4747

4848
def stop(self):
4949
Qth.stop()
50-
5150
def sendTsl(self, mode, value):
5251
return Qth.sendTsl(mode, value)
5352

@@ -76,15 +75,38 @@ def recvTslCallback(self, value):
7675
def readTslCallback(self, ids, pkgId):
7776
logger.info("readTsl ids:{} pkgId:{}".format(ids, pkgId))
7877
value=dict()
78+
79+
temp1, humi =CurrentApp().sensor_service.get_temp1_and_humi()
80+
press, temp2 = CurrentApp().sensor_service.get_press_and_temp2()
81+
r,g,b = CurrentApp().sensor_service.get_rgb888()
82+
83+
value={
84+
3:temp1,
85+
4:humi,
86+
5:temp2,
87+
6:press,
88+
7:{1:r, 2:g, 3:b},
89+
90+
}
91+
lbs=lbs_service.LbsService()
92+
lbs.put_lbs()
93+
94+
95+
7996
for id in ids:
80-
if 1 == id:
81-
value[1]=180.25
82-
elif 2 == id:
83-
value[2]=30
84-
elif 3 == id:
85-
value[3]=True
97+
if 3 == id:
98+
value[3]=temp1
99+
elif 4 == id:
100+
value[4]=humi
101+
elif 5 == id:
102+
value[5]=temp2
103+
elif 6 == id:
104+
value[6]=press
105+
elif 7 == id:
106+
value[7]={1:r, 2:g, 3:b}
86107
Qth.ackTsl(1, value, pkgId)
87-
108+
109+
88110
def recvTslServerCallback(self, serverId, value, pkgId):
89111
logger.info("recvTslServer serverId:{} value:{} pkgId:{}".format(serverId, value, pkgId))
90112
Qth.ackTslServer(1, serverId, value, pkgId)

code/extensions/sensor_service.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,20 @@ def load(self):
4040
Thread(target=self.start_update).start()
4141

4242

43+
def get_temp1_and_humi(self):
44+
return self.shtc3.getTempAndHumi()
45+
46+
def get_press_and_temp2(self):
47+
return self.lps22hb.getTempAndPressure()
48+
def get_rgb888(self):
49+
rgb888 = self.tcs34725.getRGBValue()
50+
logger.debug("R: {}, G: {}, B: {}".format((rgb888 >> 16) & 0xFF, (rgb888 >> 8) & 0xFF, rgb888 & 0xFF))
51+
52+
r = (rgb888 >> 16) & 0xFF
53+
g = (rgb888 >> 8) & 0xFF
54+
b = rgb888 & 0xFF
55+
return r, g, b
56+
4357
def start_update(self):
4458
prev_temp1 = None
4559
prev_humi = None

media/1.png

7.88 MB
Loading

0 commit comments

Comments
 (0)