三星ARTIK 055开发体验
准备好了么,来自ATSAMD51的特快专递已准备就绪,就等你来!
Adafruit Metro系列又双叒叕出新品了,这是迄今为止最为强大,速度最快的Metro产品,搭载来自Microchip的ATSAMD51产品,120MHz的最高主频、浮点运算支持,以及SPI/UART/I2C硬件支持,外观还是Arduino的形态。
借Arduino的外形成名并非Adafruit的独家之秘!许多厂商感慨于Arduino的受欢迎程序,不得不蹭一把Arduino的热度!以Arduino之名,推介各自的硬件产品,确实吸引了更多的目光!
Metro M4 Express开发板的设计也有可圈可点之处!
首先是MCU,使用的的是来自Microchip的ATSAMD51,这是一款基于Cortex-M4的产品,最高工作主频为120MHz,其它一些特性列表如下
• Cortex-M4内核,最高主频120MHz
• 硬件DSP及浮点运算支持
• 512/192KB的Flash/RAM组合存储
• 32位运算及3.3V工作电压
• DUAL 1MSPS DAC接口(A0, A1)
• DUAL 1MSPS ADC接口(8个模拟pin)
• 6个串行接口(I2C/SPI/UART)
• 16个PWM输出
• 立体声I2S输入/输出接口
• 10位并行捕获控制器
• 使用64 QFN封装
供电接口设计,板载DC接口,可以使用7~9V的外部DC电源对其供电,该接口有独立的开关来进行控制。Micro USB即可以充当供电接口,也可以做为串口来使用。开发板提供了25个GPIO,其中8个用于模拟输入,其中两个可以用于真正的模拟输出,其它一些接口复用于SPI/I2C/UART等设备,工作电平均为3.3V。
原生的USB支持,不需要USB-TTL设备来进行转换,该接口用于串口通信时,可直接与PC连接,以进行数据交换;该接口还可以用做HID来连接键盘及鼠标。
开发板的其它一些特性还包括板载的LED灯、NEOPIXEL,2MB的QSPI FLASH存储器,在Circuit Python中可以用来存储脚本、库及其它一些文件;另外UF2 bootloader技术使得对开发板烧写程序变得更容易!对了,开发板还提供了一个JTAG调试接口,可以对其进行代码调试,这可是Arduino没有的功能!
另外值得一提的是,该板目前的状态还是BETA状态,按官方的说法,这是该MCU的第一款产品,目前就是让用户体验一种新奇、冒险、甚至是宕机的快感!
Adafruit的SAMD21及SAMD51开发板均支持UF2 bootloader技术,该技术将内部FLASH存储器映射成一个PC存储器,在烧写程序代码时,只要将二进制代码文件直接拖到该磁盘,就完成了烧写过程,极大的简化了烧写步骤。如果要进入UF2 bootloader模式,快速双击reset键,NEOPXEL变成绿色,同是PC端会出现一个METROM4BOOT存储设备,表示开发板已进入了UF2 bootloader模式。
Metro M4支持Arduino开发,先安装必要的硬件支持,安装好了之后,选择Metro M4 Express开发板
安装好硬件支持之后,需要选择Metro M4 Express开发板作为目标板
然后就像一般的Arduino开发板一样进行开发,点个灯,加个传感器之类,这里就不介绍了。
重点是CircuitPython。
CircuitPython是一种编程语言,主要用于在低成本微控制器板上进行编程实验和学习。它使得入门比以往任何时候都更容易,无需前期桌面下载。设置好电路板后,打开任何文本编辑器,开始编辑代码。就这么简单。讲白了,所谓的CircuitPython就是Python的MCU版本,简单、易用。
在使用CircuitPython之前,需要做好准备工作。第一件事就是将Metro M4 Express变成一个Python解释器,按照前面介绍的方法,将CircuitPython固件通过UF2写入到开发板,重新上电后METRO就变成了一个Python解释器了。
接下来的工作是编程程序代码,可以使用普通的文本编程器来编写Python代码,当然最好的方法还是使用专用的编辑器来编写代码,专用的代码编辑器如Mu,带来了语法高亮、代码格式化及代码提示等附加功能,能极大的提升代码编辑效率。
Mu编辑器除了能编辑代码之外,还提供了两个实用工具,一个是Serial,另一个是Plotter,前者可以代替putty等来实现与开发板的交互,后者则提供了一个实用的绘图工具,类似Arduino的Serial Plotter。
CircuitPython在板上查找要运行的代码文件。有四个选项:code.txt,code.py,main.txt和main.py。CircuitPython按顺序查找这些文件,然后运行它找到的第一个文件。虽然我们建议使用code.py作为您的代码文件,但重要的是要知道其他选项存在。如果您的程序在运行时没有得到预期的效果,请确保是否另一个文件正在运行。
最后还要提一下库文件的问题。Python之所以强大,是因为有大量三方的库供我们调用,Adafruit也为Circuit提供了大量的库支持,在使用一些外设时,不需要自己去再造一个轮子,直接引用这些库就可以完成任务,这当然是一件妙事!
从官方下载库文件解压后会得到一个lib文件夹,将该文件夹复制到CURCUITPY所在的磁盘根目录下,就可以使用这些三方库来增强程序功能。
现在开始,可以愉快的使用Metro M4 Express来体验CIRCUITPYTHON了。
点灯我们就不点了,但是看下代码,熟悉下编程风格还是有必要的,如下
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.D13)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = 0
time.sleep(.5)
led.value = 1
time.sleep(.5)
如果不熟悉这些函数,可以按照Arduino代码的风格来猜,基本上是一致的。
要熟悉相关的代码及库,可以借助Python自身的帮助功能,举例如下,假设我不知道board模块里有哪些功能,在Serial窗口里执行如下的代码
>>> import board
>>> dir(board)
['A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'D0', 'RX', 'D1', 'TX', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10', 'D11', 'D12', 'D13', 'SDA', 'SCL', 'NEOPIXEL', 'SCK', 'MOSI', 'MISO', 'LED_RX', 'LED_TX', 'I2C', 'SPI', 'UART']
>>>
其中>>>正是Python交互的提示符,我们可以看到board模块基本只提供了一些开发板的接口定义,我们在上述源代码中使用的board.D13就是开发板的13号pin。
在lib目录下有个simpleio.mpy,这是一个简单IO封装库,如果想获取其帮助,参考如下代码
>>> import simpleio
>>> dir(simpleio)
['tone', 'DigitalOut', 'time', 'shift_out', 'bitWrite', 'array', '__name__', 'DigitalIn', 'digitalio', 'shift_in', 'map_range', 'pulseio', 'audioio', 'Servo']
>>>
另外也可以使用help()来获取更详细的帮助,如下
>>> help(simpleio)
object is of type module
tone --
DigitalOut --
time --
shift_out --
bitWrite --
array --
__name__ -- simpleio
DigitalIn --
digitalio --
shift_in --
map_range --
pulseio --
audioio --
Servo --
>>>
这样看是不是更清晰了!
差不多了,该写个完整的脚本来体验Python的便利了。这次使用的是DHT11温湿度传感器,在一些精度要求不同的场合,DHT11还是很不错的,如果对精度要求高,可以使用DHT22,这些设备都有一个优势,只使用一根信号线,连接非常简单。将DHT11的信号线连接至D2,然后开始写程序,代码如下
import board
import adafruit_dht as dht
import time
dht11 = dht.DHT11(board.D2)
while True:
temp, humi = dht11.temperature, dht11.humidity
print('temperature: {}\nhumidity: {}%'.format(temp, humi))
time.sleep(5)
保存为code.py,让它自动运行,在Mu中打开串口,得到如下的结果
从未如此简单,是不是?
只可惜Metro M4 Express开发板没有网络连接能力,否则就可以将检测到的数据发布到Internet上了!
总结来说,Metro M4 Express开发板还是值得一试的。以前总有人担心,在MCU上使用Python,性能是否会有瓶颈,但是在120MHz的频率之下,简单的应用场合下,使用起来还是很流畅的!
在AI呼声越来越高的今天,了解一点Python,学一点Python,未尝不是一种好的选择,也许一觉醒来,AI已普及到了MCU上,谁能说得好呢?