参考案例¶
Python轻应用提供了丰富的案例及文档供开发者参考,下面是模块部分和功能实现的参考。
I 外设¶
Python轻应用提供了针对部分外设接口的示例程序,以方便开发者参考引用。
1: UART读写¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import haascv
from haascv import driver
uartObj = driver.uart()#获取uart 驱动的对象
uartObj.open(2, 3, 115200, 0, 0, 0)#port,bitwidth,baudrate,stop_bits,flow_control,parity
uart_read_buf = bytearray(4)#定义存储读取的数据的数组
uart_write_buf = bytearray([97, 98, 99, 100])#定义需要发送的数据
print(uart_write_buf)#打印发送的数据
uartObj.write(uart_write_buf)#开始写数据
readSize = uartObj.read(uart_read_buf)#读数据
print(readSize)#打印读到数据的大小
print(uart_read_buf)#打印读取到的数据内容
uartObj.close()#关闭uart模块
|
2: 延时和时间¶
1 2 3 4 5 6 7 | import utime
utime.sleep(1) # sleep for 1 second 延时1s
utime.sleep_ms(500) # sleep for 500 milliseconds 延时500ms
utime.sleep_us(10) # sleep for 10 microseconds 延时10us
start = utime.ticks_ms() # get value of millisecond counter 获取毫秒计数器的值
delta = utime.ticks_diff(utime.ticks_ms(), start) # compute time difference 计算时间差
|
3: LED 发光二极管¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import utime
import haascv
from haascv import driver
GPIO = driver.gpio()#获取gpio 类对象
leds=(34,35,36,40,41)#hass100 板子上led对应的GPIO口
for i in range(10):
for led in leds:
GPIO.open(led, 5, 0)
GPIO.write(0)
utime.sleep_ms(100)
GPIO.write(1)
utime.sleep_ms(100)
GPIO.close()
|
4: 管脚和GPIO¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import haascv
from haascv import driver
gpioObj = driver.gpio();#获取GPIO对象
gpioObj.open(35, Pin.OUT_PP, 0)#配置成输出模式
gpioObj..write(0)#拉低
gpioObj..write(1)#拉高
gpioObj.toggle()#出发生效
gpioObj.close()#关闭模块
gpioObj.open(35, gpioObj .IN, gpioObj .PULL_UP)#配置成输入模式
gpio_value = gpioObj.read()#读取gpio口状态值
print(gpio_value)#打印状态值
gpioObj.close()#关闭模块
|
5: PWM脉宽调制¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import haascv
from haascv import driver
print("start pwm")
pwmObj = driver.pwm();#获取pwm对象
pwmObj.open(31, 0.2, 25, 0)#打开PWM模块
pwmObj.setFreq(3250000)#设置频率
pwmObj.setDuty(0.5)#设置duty
duty = pwmObj.getDuty()#获取duty值
print(duty)#打印获取的duty值
freq = pwmObj.getFreq()#获取频率值
print(freq)#打印频率值
pwmObj.close()#关闭pwm模块
|
6: SPI总线¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import haascv
from haascv import driver
spiObj = driver.spi();#获取SPI类对象
spiObj.open(0, 0, 2000000, 0)#打开SPI模块
spi_read_buf = bytearray(4)#定义存储读取数据的对象
spi_write_buf = bytearray([0x01, 0x02, 0x10, 0xaa])#定义待写的数据
print(spi_write_buf)#打印写的buffer
spiObj.write(spi_write_buf)#开发发送数据
spiObj.read(spi_read_buf)#读取数据
print(spi_read_buf)#打印读取的数据
spiObj.writeAndRead(spi_write_buf, spi_read_buf)#发送并读取数据
print(spi_read_buf)#打印读取的数据内容
spiObj.close()#关闭spi模块
|
7: I2C总线¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import haascv
from haascv import driver
i2cObj = driver.i2c();#获取i2c类对象
i2cObj.open(1, 8, 0, 0, 0x70, 0)#配置i2c模块
i2c_read_buf = bytearray(6)#定义存储读取数据的对象
i2c_write_buf = bytearray([1, 2, 3, 4, 5, 6])#定义待写的数据
print(i2c_write_buf)#打印写的buffer
i2cObj.write(i2c_write_buf)#开始写数据
i2cObj.read(i2c_read_buf)#读取数据
print(i2c_read_buf)#打印读取的数据
i2cObj.close()#关闭i2c模块
|
II AI/多媒体¶
Python轻应用提供了针对部分AI场景的应用案例,以方便开发者参考引用。开发者下载 AliOS-Things 后就可以按照下面的步骤编译验证了。
需要切换到 dev_3.1.0_haas
分支
git clone https://github.com/alibaba/AliOS-Things.git -b dev_3.1.0_haas
1: 数字识别¶
通过HaasCV 模块,完成数据源的封装处理,图⽚的解码,图⽚数据的格式转换和缩放等功能,最后将处理好的数据喂给ML 模块进⾏推理得到预期结果.
编译¶
make distclean
make mpy_odla_ocr_demo@haas100 -c config
make
代码¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import haascv
from haascv import ml
print("-------------------Welcome HaasAI MicroPython--------------------")
print("-----ml odla demo start-----")
#test data
#"/data/odla/test0.bmp"
#"/data/odla/test1.bmp"
#"/data/odla/test2.bmp"
#"/data/odla/test3.bmp"
#"/data/odla/test4.bmp"
#"/data/odla/test5.bmp"
#"/data/odla/test6.bmp"
#"/data/odla/test7.bmp"
#"/data/odla/test8.bmp"
#"/data/odla/test9.bmp"
mlobj = ml();
mlobj.open(ml.ML_ENGINE_ODLA);
mlobj.setInputData("/data/odla/test4.bmp");
mlobj.loadNet("default");
mlobj.predict();
responses_value = bytearray(10)
mlobj.getPredictResponses(responses_value);
print(responses_value);
mlobj.unLoadNet();
mlobj.close();
print("-----ml odla demo end-----")
|
2: 人脸对比¶
通过HaasCV 模块,完成数据源的封装处理,图⽚的解码,图⽚数据的格式转换和缩放等功能,最后将处理好的数据喂给ML 模块,ML 模块通过Alibaba Cloud SDK引擎和达摩院的视觉开放智能平台进⾏交互,得到预期结果.
编译¶
make distclean
make mpy_ucloud_facebody_comparing_demo@haas100 -c config
make
代码¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import haascv
from haascv import ml
print("-------------------Welcome HaasAI MicroPython--------------------");
print("-----ml ucloud FacebodyComparing demo start-----");
OSS_ACCESS_KEY = "XXX";
OSS_ACCESS_SECRET = "XXX";
OSS_ENDPOINT = "XXX";
OSS_BUCKET = "XXX";
ML_MYFACE_PATH = "XXX";
mlobj = ml();
mlobj.open(ml.ML_ENGINE_CLOUD);
mlobj.config(OSS_ACCESS_KEY, OSS_ACCESS_SECRET, OSS_ENDPOINT, OSS_BUCKET, ML_MYFACE_PATH);
mlobj.setInputData("/data/capture.jpg");
mlobj.loadNet("FacebodyComparing");
mlobj.predict();
responses_value = bytearray(10)
mlobj.getPredictResponses(responses_value);
print(responses_value);
mlobj.unLoadNet();
mlobj.close();
print("-----ml ucloud FacebodyComparing demo end-----")
|
3: 人物动漫化¶
通过HaasCV 模块,完成数据源的封装处理,图⽚的解码,图⽚数据的格式转换和缩放等功能,最后将处理好的数据喂给ML 模块,ML 模块通过Alibaba Cloud SDK引擎和达摩院的视觉开放智能平台进⾏交互,得到预期结果.
编译¶
make distclean
make mpy_ucloud_anime_style_demo@haas100 -c config
make
代码¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import haascv
from haascv import ml
print("-------------------Welcome HaasAI MicroPython--------------------");
print("-----ml ucloud AnimeStyle demo start-----");
OSS_ACCESS_KEY = "XXX";
OSS_ACCESS_SECRET = "XXX";
OSS_ENDPOINT = "XXX";
OSS_BUCKET = "XXX";
mlobj = ml();
mlobj.open(ml.ML_ENGINE_CLOUD);
mlobj.config(OSS_ACCESS_KEY, OSS_ACCESS_SECRET, OSS_ENDPOINT, OSS_BUCKET, "NULL");
mlobj.setInputData("/data/capture.jpg");
mlobj.loadNet("AnimeStyle");
mlobj.predict();
responses_value = bytearray(10)
mlobj.getPredictResponses(responses_value);
print(responses_value);
mlobj.unLoadNet();
mlobj.close();
print("-----ml ucloud AnimeStyle demo end-----")
|
4: 目标检测¶
通过HaasCV 模块,完成数据源的封装处理,图⽚的解码,图⽚数据的格式转换和缩放等功能,最后将处理好的数据喂给ML 模块,ML 模块通过Alibaba Cloud SDK引擎和达摩院的视觉开放智能平台进⾏交互,得到预期结果.
编译¶
make distclean
make mpy_ucloud_objectdet_demo@haas100 -c config
make
代码¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import haascv
from haascv import ml
print("-------------------Welcome HaasAI MicroPython--------------------");
print("-----ml ucloud ObjectDet demo start-----");
OSS_ACCESS_KEY = "XXX";
OSS_ACCESS_SECRET = "XXX";
OSS_ENDPOINT = "XXX";
OSS_BUCKET = "XXX";
mlobj = ml();
mlobj.open(ml.ML_ENGINE_CLOUD);
mlobj.config(OSS_ACCESS_KEY, OSS_ACCESS_SECRET, OSS_ENDPOINT, OSS_BUCKET, "NULL");
mlobj.setInputData("/data/capture.jpg");
mlobj.loadNet("ObjectDet");
mlobj.predict();
responses_value = bytearray(10)
mlobj.getPredictResponses(responses_value);
print(responses_value);
mlobj.unLoadNet();
mlobj.close();
print("-----ml ucloud ObjectDet demo end-----")
|
5: 表情识别¶
通过HaasCV 模块,完成数据源的封装处理,图⽚的解码,图⽚数据的格式转换和缩放等功能,最后将处理好的数据喂给ML 模块,ML 模块通过Alibaba Cloud SDK引擎和达摩院的视觉开放智能平台进⾏交互,得到预期结果.
编译¶
make distclean
make mpy_ucloud_recognize_expression_demo@haas100 -c config
make
代码¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import haascv
from haascv import ml
print("-------------------Welcome HaasAI MicroPython--------------------");
print("-----ml ucloud RecognizeExpression demo start-----");
OSS_ACCESS_KEY = "XXX";
OSS_ACCESS_SECRET = "XXX";
OSS_ENDPOINT = "XXX";
OSS_BUCKET = "XXX";
mlobj = ml();
mlobj.open(ml.ML_ENGINE_CLOUD);
mlobj.config(OSS_ACCESS_KEY, OSS_ACCESS_SECRET, OSS_ENDPOINT, OSS_BUCKET, "NULL");
mlobj.setInputData("/data/capture.jpg");
mlobj.loadNet("RecognizeExpression");
mlobj.predict();
responses_value = bytearray(10)
mlobj.getPredictResponses(responses_value);
print(responses_value);
mlobj.unLoadNet();
mlobj.close();
print("-----ml ucloud RecognizeExpression demo end-----")
|
III 云端连接/控制¶
基于MicroPython,提供了HaaS100同阿里云物联网平台连接和控制的接口.让开发者可以轻松实现数据上云,以及通过云端控制和调用设备端硬件接口和软件服务的能力.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | from linkkit import linkkit
import netmgr as nm
import utime
# 物联网平台连接成功的标志
connected = 0
# 物联网平台申请到的产品和设备信息
PRODUCT_KEY = "a1uTFk4xjko"
PRODUCT_SECRET = "xxxxxxx"
DEVICE_NAME = "mpy_001"
DEVICE_SECRET = "xxxxxxxxxxxxxxx"
# 连接wifi 函数
def connect_wifi():
nm.init()
nm.connect("KIDS","12345678")
# 物联网平台连接成功的回调函数
def on_connect():
global connected
print('linkkit is connected ')
connected = 1
# 云端 控制led 的 消息接收和处理函数
def on_prop_set(request):
from haascv import driver
import ujson
ON = 0
OFF = 1
payload = ujson.loads(request)
stat = payload["LEDSwitch"]
GPIO = driver.gpio()
led = 34
GPIO.open(led, 5, 0)
if stat == 1:
GPIO.write(ON)
else:
GPIO.write(OFF)
utime.sleep_ms(200)
GPIO.close()
# 连接wifi
connect_wifi()
# 初始化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()
if(connected == 0):
print(" wait for linkkit conneted callback ")
utime.sleep_ms(100)
# 触发物联网平台消息接收函数并设置超时
while(True):
lk.do_yield(200)
import haascv
from haascv import ml
print("-------------------Welcome HaasAI MicroPython--------------------");
|
修改上述代码中的wifi ssid,密码,以及物联网相关key信息,将修改过后的代码保存到sdcard根目录的linkkit_test.py 文件中,机器插入sdcard并重启,通过串口输入命令
micropython /sdcard/linkkit_test.py