From c54caebff1afa5518062bb8ca5e6eceee09ef6ad Mon Sep 17 00:00:00 2001 From: rivern yuan Date: Thu, 2 Sep 2021 19:36:25 +0800 Subject: [PATCH] Update the demo --- README.md | 10 ++++---- demo/README.md | 4 +++ demo/cloud_demo.py | 56 ++++++++++++++++++++++++++++++++++++++++++ demo/exception_demo.py | 32 ++++++++++++++++++++++++ demo/extint_demo.py | 29 ++++++++++++++++++++++ demo/gpio_demo.py | 11 +++++++++ demo/log_demo.py | 46 ++++++++++++++++++++++++++++++++++ demo/media_demo.py | 42 +++++++++++++++++++++++++++++++ demo/net_demo.py | 56 ++++++++++++++++++++++++++++++++++++++++++ demo/pm_demo.py | 20 +++++++++++++++ demo/queue_demo.py | 15 +++++++++++ demo/sys_bus_demo.py | 18 ++++++++++++++ demo/timer_demo.py | 14 +++++++++++ demo/watchdog_demo.py | 27 ++++++++++++++++++++ 14 files changed, 375 insertions(+), 5 deletions(-) create mode 100644 demo/README.md create mode 100644 demo/cloud_demo.py create mode 100644 demo/exception_demo.py create mode 100644 demo/extint_demo.py create mode 100644 demo/gpio_demo.py create mode 100644 demo/log_demo.py create mode 100644 demo/media_demo.py create mode 100644 demo/net_demo.py create mode 100644 demo/pm_demo.py create mode 100644 demo/queue_demo.py create mode 100644 demo/sys_bus_demo.py create mode 100644 demo/timer_demo.py create mode 100644 demo/watchdog_demo.py diff --git a/README.md b/README.md index 39c2b17..cf209ba 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ -**API文档 - 里面有API文档** +**API文档 - 里面有API文档** -**helios service文档 \- 框架文档** +**helios service文档 - 框架文档** -**Code \- 代码** +**Code - 代码** @@ -14,7 +14,7 @@ **API documentation - It has API documentation** -**Helios Service document \- Framework document** +**Helios Service document - Framework document** -**Code \- code** +**Code - code** diff --git a/demo/README.md b/demo/README.md new file mode 100644 index 0000000..175dbd7 --- /dev/null +++ b/demo/README.md @@ -0,0 +1,4 @@ +# HeliosService demo + +各个服务对应的demo名称为-->服务名_demo.py + diff --git a/demo/cloud_demo.py b/demo/cloud_demo.py new file mode 100644 index 0000000..2ff05ee --- /dev/null +++ b/demo/cloud_demo.py @@ -0,0 +1,56 @@ +""" + 使用云服务之前, 需要传入配置文件, 并启动云服务, 详见进阶篇中的操作使用云服务 +""" + +from usr.bin.guard import GuardContext +import utime + +# 刷新容器 +guard_context = GuardContext() +guard_context.refresh() + +# 获取云服务 +cloud_ser = guard_context.get_server("cloud") +"==============================================第一种方法===================================" +""" + 这是非同步的, 所以需要sleep 2秒 +""" +# # 加载优先级低的服务 并拉起 +# guard_context.reload() +# +# # 等待下载, 因为是异步的这里可以等待2s +# utime.sleep(2) +# if cloud_ser.get_app_code() == "3001": +# # 重启设备 +# pass + +"=============================================第二种========================================" +""" + 此为订阅此升级事件 +""" +def func(*args, **kwargs): + """ + + :param args: ('anonymous',) 发送人, 默认是'anonymous'无需关心 + :param kwargs: 格式如下 + { + 'message':{ + 'message_id':2, # 消息ID + 'sender':'anonymous', # 发送人 + 'message':'xxx', # 来的消息, + 'from_event':'CLOUD', # 从哪个事件或服务来的 + 'msg_type':255 # 消息类型, 默认是255 + } + } + :return: + """ + if kwargs['message']['message'] == '3001': + # 重启模块, 调用power接口 + pass + + +# 订阅服务 +cloud_ser.subscribe(func) + +# reload容器 +guard_context.reload() diff --git a/demo/exception_demo.py b/demo/exception_demo.py new file mode 100644 index 0000000..39eefc6 --- /dev/null +++ b/demo/exception_demo.py @@ -0,0 +1,32 @@ +from usr.bin.guard import GuardContext + +# 刷新容器 +guard_context = GuardContext() +guard_context.refresh() + + +def func(*args, **kwargs): + """ + + :param args: ('anonymous',) 发送人, 默认是'anonymous'无需关心 + :param kwargs: 格式如下 + { + 'message':{ + 'message_id':2, # 消息ID + 'sender':'anonymous', # 发送人 + 'message':'xxx', # 来的消息, + 'from_event':'EXCEPTION', # 从那个事件或服务来的 + 'msg_type':255 # 消息类型, 默认是255 + } + } + :return: + """ + print("func + {}".format(kwargs['message']['message'])) + + +# 获取服务 +exception_ser = guard_context.get_server("exception") +# 订阅服务 +exception_ser.subscribe(func) +# publish消息 +exception_ser.publish("this is a exception topic") diff --git a/demo/extint_demo.py b/demo/extint_demo.py new file mode 100644 index 0000000..e258cb8 --- /dev/null +++ b/demo/extint_demo.py @@ -0,0 +1,29 @@ +from machine import Pin, ExtInt +from usr.bin.third_party.ql_interrupter import ExIntProcess, BusExIntInterrupter +import sys_bus + +"======================第一种=======================" +""" + 可以自定义 topic +""" +extint = BusExIntInterrupter("TOPIC1", Pin.GPIO17, trige_mode=ExtInt.IRQ_RISING_FALLING, pull_mode=ExtInt.PULL_DISABLE) + + +def sub_cb(topic, msg): + print(topic, msg) + + +sys_bus.subscribe("TOPIC1", sub_cb) + +"=======================第二种=====================" +""" + 我们固定死 topic, 按默认规则订阅即可 +""" +# extint = ExIntProcess(Pin.GPIO17, trige_mode=ExtInt.IRQ_RISING_FALLING, pull_mode=ExtInt.PULL_DISABLE) + + +# def sub_cb(topic, msg): +# print(topic, msg) + + +# sys_bus.subscribe("GPIO17_EXINT", sub_cb) diff --git a/demo/gpio_demo.py b/demo/gpio_demo.py new file mode 100644 index 0000000..d9c2da6 --- /dev/null +++ b/demo/gpio_demo.py @@ -0,0 +1,11 @@ +from machine import Pin, ExtInt +from usr.bin.third_party.ql_interrupter import PinInterrupter + +# 初始化gpio +pin_inter = PinInterrupter(Pin.GPIO6, trige_mode=Pin.OUT, pull_mode=Pin.PULL_DISABLE, mode=0) + +# 闪烁一次在1秒的持续时间 +pin_inter.blinker(1) + +# 闪烁3次2秒的持续时间 +pin_inter.freq_blinker(3, 5) diff --git a/demo/log_demo.py b/demo/log_demo.py new file mode 100644 index 0000000..5477ad4 --- /dev/null +++ b/demo/log_demo.py @@ -0,0 +1,46 @@ +from usr.bin.guard import GuardContext + +# 刷新容器 +guard_context = GuardContext() +guard_context.refresh() + + +def func(*args, **kwargs): + """ + + :param args: ('anonymous',) 发送人, 默认是'anonymous'无需关心 + :param kwargs: 格式如下 + { + 'message':{ + 'message_id':2, # 消息ID + 'sender':'anonymous', # 发送人 + 'message':'xxx', # 可以获取日志消息, + 'from_event':'LOG', # 从那个事件或服务来的 + 'msg_type':255 # 消息类型, 默认是255 + } + } + :return: + """ + print("func + {}".format(kwargs['message']['message'])) + + +# 获取服务 +log_ser = guard_context.get_server("log") +# 订阅服务 +log_ser.set_level("DEBUG") +# 获取日志客户端 +app_log = guard_context.get_logger("app") +# 打印日志 +app_log.debug("this is a debug log") +app_log.info("this is a debug log") +app_log.warning("this is a debug log") +app_log.error("this is a debug log") +app_log.critical("this is a debug log") + +# 可以订阅日志 +log_ser.subscribe(func) +app_log.debug("this is a debug log") +app_log.info("this is a debug log") +app_log.warning("this is a debug log") +app_log.error("this is a debug log") +app_log.critical("this is a debug log") \ No newline at end of file diff --git a/demo/media_demo.py b/demo/media_demo.py new file mode 100644 index 0000000..6a3fbc4 --- /dev/null +++ b/demo/media_demo.py @@ -0,0 +1,42 @@ +from usr.bin.guard import GuardContext + +# 刷新容器 +guard_context = GuardContext() +guard_context.refresh() + + +def func(*args, **kwargs): + """ + + :param args: ('anonymous',) 发送人, 默认是'anonymous'无需关心 + :param kwargs: 格式如下 + { + 'message':{ + 'message_id':2, # 消息ID + 'sender':'anonymous', # 发送人 + 'message': { # 来的消息 + 'play_data': 'tts', # 播放音频或者tts消息 + 'breakin': 0, # 是否允许被打断 + 'mode': 2, # 只有tts存在字段, audio不存在此字段, 模式 + 'priority': 4 # 优先级4>3>2>1>0 + }, + 'from_event':'MEDIA', # 从那个事件或服务来的 + 'msg_type':1 # 消息类型, 1是来自tts的消息, 0是来自audio的消息 + } + } + :return: + """ + print(kwargs['message']) + + +# 获取媒体服务 +media_ser = guard_context.get_server("media") +# 订阅媒体服务 +media_ser.subscribe(func) +# 设置模式 +media_ser.set_mode(0) +# 设置是否自动播报, 默认是True, 如果为False, 采用订阅手动播报, 一旦设置, audio_play和tts_play将不再生效, 用户可以从订阅消息通拿到并自动播报 +media_ser.enable = True +# publish消息 +media_ser.audio_play(play_data="usr/a.mp3") +media_ser.tts_play(play_data="这是一条tts消息") diff --git a/demo/net_demo.py b/demo/net_demo.py new file mode 100644 index 0000000..f4d5be3 --- /dev/null +++ b/demo/net_demo.py @@ -0,0 +1,56 @@ +from usr.bin.guard import GuardContext + +# 刷新容器 +guard_context = GuardContext() +guard_context.refresh() + + +def func(*args, **kwargs): + print(args, kwargs) + """ + + :param args: ('anonymous',) 发送人, 默认是'anonymous'无需关心 + :param kwargs: 格式如下 + { + 'message':{ + 'message_id':2, # 消息ID + 'sender':'anonymous', # 发送人 + 'message': { # 来的消息 + "sim_status": 1, # sim卡状态 1为正常0为异常 + "net_status": 1, # 网络状态 1为正常0为异常 + "datacall_status": 1, # 注网状态 1为正常0为异常, 一般只需关注拨号状态即可 + "profile_id": 1, # pid + "ip_type": 0, # 0是ipv4, 1是ipv6 + "IPv4": "xxxx", + "IPv4_DNS1": "xxxx", + "IPv4_DNS2": "xxxx", + "IPv6": "xxxx", + "IPv6_DNS1": "xxxx", + "IPv6_DNS2": "xxxx", + }, + 'from_event':'NET', # 从那个事件或服务来的 + 'msg_type':1 # 1代表来自有data call信息 + } + } + :return: + """ + print(kwargs['message']['message']) + + +# 获取媒体服务 +net_ser = guard_context.get_server("net") +# 获取并打印媒体服务 +_net = net_ser.net +print("_net = {}".format(_net)) +# 获取并打印sim卡原生对象 +_sim = net_ser.sim +print("_sim = {}".format(_sim)) +# 获取并打印dataCall原生对象 +_data_call = net_ser.data_call +print("_data_call = {}".format(_data_call)) +# 等待网络连接 +net_ser.wait_connect(5) +# 获取网络状态, 返回值, 1网络正常, 0网络异常 +net_ser.get_net_status() +# 订阅网络服务 +net_ser.subscribe(func) diff --git a/demo/pm_demo.py b/demo/pm_demo.py new file mode 100644 index 0000000..59e646e --- /dev/null +++ b/demo/pm_demo.py @@ -0,0 +1,20 @@ +from usr.bin.guard import GuardContext + +# 刷新容器 +guard_context = GuardContext() +guard_context.refresh() + +# 获取pm低功耗服务 +pm_ser = guard_context.get_server("pm") +# 投票不睡眠 +pm_ser.lock() +pm_ser.lock() +pm_ser.lock() +# 释放投票进入休眠 +pm_ser.unlock() +pm_ser.unlock() +pm_ser.unlock() +# 获取票数 +pm_ser.count() +# 设置是否自动休眠, 默认是自动休眠, 1是自动休眠0则不是 +pm_ser.auto_sleep(1) \ No newline at end of file diff --git a/demo/queue_demo.py b/demo/queue_demo.py new file mode 100644 index 0000000..a913cf9 --- /dev/null +++ b/demo/queue_demo.py @@ -0,0 +1,15 @@ +import _thread +from queue import Queue + +q = Queue(20) + + +def get(): + while True: + msg = q.get() + print("msg = {}".format(msg)) + + +_thread.start_new_thread(get, ()) + +q.put("this is a msg") diff --git a/demo/sys_bus_demo.py b/demo/sys_bus_demo.py new file mode 100644 index 0000000..e670c6c --- /dev/null +++ b/demo/sys_bus_demo.py @@ -0,0 +1,18 @@ +import sys_bus + + +def sub_cb(topic, msg): + """ + 订阅函数 + :param topic: 订阅的topic + :param msg: 来自topic的消息 + :return: + """ + print("sub_cb === {}".format(topic, msg)) + + +# 订阅topic +sys_bus.subscribe("test", sub_cb) + +# 发布消息到topic中 +sys_bus.publish("test", "this is one sys_bus") diff --git a/demo/timer_demo.py b/demo/timer_demo.py new file mode 100644 index 0000000..491f011 --- /dev/null +++ b/demo/timer_demo.py @@ -0,0 +1,14 @@ +from usr.bin.third_party.ql_interrupter import TimerInterrupter + + +def func(*args, **kwargs): + print("func args = {} kwargs = {}".format(args, kwargs)) + + +# 初始化 传入回调函数, 1代表, 一直执行 +# timer = TimerInterrupter(3000, func, 1) +# 此为只执行1次 +timer = TimerInterrupter(3000, func, 0) + +# 启动timer +timer.start() diff --git a/demo/watchdog_demo.py b/demo/watchdog_demo.py new file mode 100644 index 0000000..611f53e --- /dev/null +++ b/demo/watchdog_demo.py @@ -0,0 +1,27 @@ +import sys_bus +from machine import Pin, ExtInt +from usr.bin.third_party.ql_interrupter import WatchDog + + +def topic1_cb(topic, msg): + print("topic1_cb topic = {} msg = {}".format(topic, msg)) + + +def topic2_cb(topic, msg): + print("topic2_cb topic = {} msg = {}".format(topic, msg)) + + +# 订阅喂狗后,硬件狗拉GPIO 告知模块喂狗成功 + +sys_bus.subscribe("WDT_KICK_TOPIC", topic1_cb) + +# 订阅喂狗后的回调 + +sys_bus.subscribe("WDT_KICK_TOPIC_FEED", topic2_cb) + + +wd = WatchDog(Pin.GPIO17, 1, 10000) + +wd.start() + +