.. _demoes: 参考案例 ===================== Python轻应用提供了丰富的案例及文档供开发者参考,下面是模块部分和功能实现的参考。 | I 外设 ---------------- Python轻应用提供了针对部分外设接口的示例程序,以方便开发者参考引用。 | 1: UART读写 >>>>>>>>>>>>>>>>>>>>>>>>>>> .. code-block:: python :linenos: 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: 延时和时间 >>>>>>>>>>>>>>>>>>>>>>>>>>> .. code-block:: python :linenos: 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 发光二极管 >>>>>>>>>>>>>>>>>>>>>>>>>>> .. code-block:: python :linenos: 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 >>>>>>>>>>>>>>>>>>>>>>>>>>> .. code-block:: python :linenos: 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脉宽调制 >>>>>>>>>>>>>>>>>>>>>>>>>>> .. code-block:: python :linenos: 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总线 >>>>>>>>>>>>>>>>>>>>>>>>>>> .. code-block:: python :linenos: 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总线 >>>>>>>>>>>>>>>>>>>>>>>>>>> .. code-block:: python :linenos: 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 代码 ::::::::: .. code-block:: python :linenos: 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 代码 ::::::::: .. code-block:: python :linenos: 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 代码 ::::::::: .. code-block:: python :linenos: 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 代码 ::::::::: .. code-block:: python :linenos: 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 代码 ::::::::: .. code-block:: python :linenos: 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同阿里云物联网平台连接和控制的接口.让开发者可以轻松实现数据上云,以及通过云端控制和调用设备端硬件接口和软件服务的能力. 文档 :::::: `<> `_ 上述文档中中实现的功能如下: - 设备联网 - 连接物联网平台 - 等待云端控制消息,并实现设备控制 代码 ::::::::: .. code-block:: python :linenos: 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