1、前言
Python 语言的是一款非常容易使用的解释性语言,它的主要特点如下:
- 易学易用
- 可扩展可移植
- 丰富的三方库
正是由于以上这些特点,使得python在一些逻辑简单,功能复杂的场景应用非常广泛。近几年,随着人工智能的飞速发展,Python 的优点得到的充分的体现,因此成为了AI开发的首选语言。
MicroPython(简称mpy)在保留了python语言主要特性的基础上,他还对嵌入式系统的底层做了非常不错的封装,它的特点如下:
- 沿用python语法和基本数据结构,保持易学易用性
- 提供基于嵌入式系统的硬件功能库封装,让嵌入式开发简单便捷
今天要介绍的是HaaS100如何使用micropython ,连接阿里云的物联网平台,并通过云端来控制设备的LED 灯。
2、方案介绍
阿里云物联网平台提供安全可靠的设备连接通信能力,支持设备数据采集上云,规则引擎流转数据和云端数据下发设备端。此外,也提供方便快捷的设备管理能力,支持物模型定义,数据结构化存储,和远程调试、监控、运维。
本文通过物联网平台下发修改HaaS100的LED状态的命令,HaaS100上的Python程序接收命令,并控制LED灯。具体交互方案设计如下:
3、效果视频
LinkKit 控制HaaS100
4、物品清单
3.1、硬件
- HaaS100 开发板一块
- 电源一个
- micro usb 线一条
- sdcard 一个
注意事项:
- HaaS100支持外接微型SD卡(Micro SD),最大支持64GB数据的存储,SD卡槽位于开发板背,可以外接微型SD存储卡
- sdcard 格式支持: FAT16/FAT32
- 本案例中暂时不支持exFAT 格式
3.2、软件
3.2.1、物联网平台
创建设备
首先参考文章 https://help.aliyun.com/document_detail/189183.html?spm=a2c4g.11174283.6.572.3a8b1668juSbg2 ,创建一个自己的产品和设备
如上图所示,笔者创建的产品是 mpy_test, 设备是mpy_001
创建物模型
如上图所示,首先点击产品,选择我们自己创建的产品mpy_test, 然后点击编辑草稿,添加自定义功能 进入下图中的界面
选择属性,输入LED开关, 选中弹出的默认属性, 点击确定即可完成属性的添加
也可以完全自己定义一个属性,确保属性主程序代码中的属性键的名称和 这里一致即可。
创建完成以后,点击发布即可。
3.2.2、HaaS设备端
按照HaaS100快速开始下载最新的HaaS100 开源代码。
以下就是micropython 轻应用的主体代码,在电脑上将其保存到文件 LinkKitControlLed.py, 并在电脑上插入sdcard(有些电脑需要SD卡读卡器),然后拷贝LinkKitControlLed.py到 sdcard 的根目录。
它的主要功能如下:
- 连接wifi
- 连接物联网平台
- 等待物联网平台的云端消息,并处理
注意事项: 请务必将代码中的
PRODUCT_KEY = "a1uTFk4xjko"
PRODUCT_SECRET = "xxxxxxx"
DEVICE_NAME = "mpy_001"
DEVICE_SECRET = "xxxxxxxxxxxxxxx"
替换成自己的物联网平台上相关信息
代码清单
-
# -*- coding: UTF-8 -*-
-
import
linkkit
-
import
netmgr as nm
-
import
utime
-
# 物联网平台连接成功的标志
-
connected =
0
-
# 请替换物联网平台申请到的产品和设备信息,可以参考文章:https://blog.csdn.net/HaaSTech/article/details/114360517
-
PRODUCT_KEY =
"a1uTFk4xjko"
-
PRODUCT_SECRET =
"xxxxxxx"
-
DEVICE_NAME =
"mpy_001"
-
DEVICE_SECRET =
"xxxxxxxxxxxxxxx"
-
-
-
# 物联网平台连接成功的回调函数
-
def
on_connect():
-
global
connected
-
print('linkkit
is connected ')
-
connected =
1
-
-
# 云端 控制led 的 消息接收和处理函数
-
def
on_prop_set(request):
-
import
driver
-
import
ujson
-
ON =
0
-
OFF =
1
-
#服务端返回的json 转换成dict
-
payload =
ujson.loads(request)
-
#获取dict 中的led 状态字段
-
stat =
payload["LEDSwitch"]
-
GPIO =
driver.gpio()
-
# led.json 是默认编译到机器data分区,用于配置led gpio 相关信息,可供控制的led列表如下:
-
# led1;led2;led3;led4;led5
-
-
GPIO.open("/data/python/config/led.json",
led1)
-
if
stat == 1:
-
GPIO.write(ON)
-
print("LED
%d ON " %(led))
-
else:
-
GPIO.write(OFF)
-
print("LED
%d OFF " %(led))
-
utime.sleep_ms(200)
-
GPIO.close()
-
-
-
# 初始化linkkit sdk
-
lk =
linkkit.LinkKit(host_name="cn-shanghai",
-
product_key=
PRODUCT_KEY,
-
device_name=
DEVICE_NAME,
-
device_secret=
DEVICE_SECRET,
-
product_secret=
PRODUCT_SECRET)
-
-
# 设置回调函数
-
lk.on_connect =
on_connect
-
lk.on_prop_set =
on_prop_set
-
# 异步连接物联网平台
-
lk.connect_async()
-
# while(connected == 0):
-
# print(" wait for linkkit conneted callback ")
-
# utime.sleep_ms(100)
-
# 触发物联网平台消息接收函数并设置超时
-
-
timeout =
2000
-
-
# 设置2s 超时,并触发linkit sdk持续处理server端信息
-
while(timeout
>= 0):
-
lk.do_yield(200)
-
timeout
-= 200
-
-
# 断开连接
-
lk.close()
5、实现方法
在开始之前,务必保证按照 HaaS100快速开始 搭建好helloworld_demo 的开发和烧录环境。并下载好最新的HaaS100 开源代码
5.1、编译固件
-
aos
make py_engine_demo@haas100 -c config
-
aos
make
编译完成以后,烧录完整的固件(至少包含py_engine_demo@haas100.bin 和 littlefs.bin)
5.2、执行轻应用代码
烧录完成以后,插入sdcard (sdcard根目录里已有LinkKitControlLed.py,)开机并连接串口
通过串口输入:
python /sdcard/LinkKitControlLed.py
就可以完成轻应用的启动,启动成功以后,串口会出现如下打印:
连接成功以后,主程序就会等待云端的消息分发,收到消息以后就会通过on_prop_set 函数处理。
5.3、物联网平台下发控制指令
在设备属性发布以后,我们就可以开始在线调试了
如上图所示:
- 选择监控运维---->在线调试
- 选择产品mpy_test 和 设备 mpy_001
- 正常情况下,设备已经在线,我们就可以看到下面的调试选项了
- 选择属性调试---->默认模块---->LED开关
- 选择参数 开启-1
- 点击调试,设置即可
发送成功以后,设备端串口会收到如下打印,最终调用回调函数,开启设备上的led 灯,从而实现视频中的效果。
MicroPython 继承了Python易学易用的特点,同时提供了基于嵌入式硬件的基础库封装,让开发者可以很方便的通过交互式的环境,实时进行嵌入式开发,让嵌入式开发也变得简单方便。
6、开发者技术支持
如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号
更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/
转载:https://blog.csdn.net/HaaSTech/article/details/114360517