目录
入手M5Stack ATOM Lite
很久没有把玩M5Stack 玩具 开发板 了。本来说研究一下用Arduino IDE给M5Stack编程,但是一直都没空实施(懒~),回头再说吧。 最近看到M5Stack的新产品,ATOM,一个很小的小玩意,没有电池,没有显示屏,不过有一个Reset按键,一个用户按键,一个三色LED,红外发射,三轴…… 反正是麻雀虽小五脏俱全。
但是,我一时也想不起来能用这个干点啥。
不过,突然想到我有个咸鱼淘的蜗牛星际主机(好像是A款)改的NAS。我淘到的这个机子有个特点,插电就自动开机,不需要再按主机上的开关键。这倒也方便,因为主机放置在一个角落里,并不能很方便的接触到主机开关,每次通电自动开机也好。不过关机和重启就没那么舒服了,需要ssh进去sudo poweroff或者sudo reboot。 于是我想到能不能用ATOM做一个外置的关机和重启按键。 嗯,有点大材小用(怎么个大材法?因为花了45块啊!我买的ATOM Lite,如果是Martrix大概两倍价钱),但是完全可以!
想法
+------+ USB +-----+
| ATOM | ========= | NAS |
+------+ +-----+
将ATOM通过USB线连接到NAS上,NAS会识别ATOM为一个串口设备。
zzzz@nas:~$ ls /dev/ttyUSB*
/dev/ttyUSB0
然后ATOM内的MicroPython的repl是以115200波特率在串口上通信的。 那么我在NAS上写一段代码,同ATOM通信,就可以接受ATOM发出的命令了,然后相应做出重启或是关机的动作。
准备ATOM按键
MicroPython系统
首先把ATOM刷成UIFlow-v1.4.5系统,目前最新的系统。 不过我并不会使用UIFlow IDE,而只会用它基于的MicroPython。 当然用Arduino的方式+C语言也可以,不过还是python方便嘛(其实是Arduino的方式我不会)。
ATOM端的程序
boot.py
系统自带的boot.py内容比较复杂,在我们的应用里不需要了,可以在本地新建一个只有如下一行内容的boot.py,用mpfshell上传到ATOM里。
import main
main.py
同boot.py一样,main.py也需要改头换面。 main.py内是我们的主程序,编程思路如下:
- while True循环,间隔0.05s
- 检测串口输入,堵塞式,我不知道有没有不堵塞的方式,还望高人指点
- 因为是堵塞检测串口输入,所以要求主机不断发送数据,这里我们检测主机发送字符"." (点)
- 如果能检测到主机不断发送".",则LED闪烁蓝色(低亮度)
- 检测按键是否一直按下
- 持续按下1秒内,亮绿色
- 持续按下1-3秒,亮黄色
- 持续按下3-5秒,亮红色
- 持续按下5-7秒,亮白色
- 持续按下7-8秒,亮绿色
- 持续按下8-10秒,亮黄色
- 如此循环,直到松开按键
- 松开按键时LED亮黄色的话,发送重启的信号,‘NAS.REBOOT’
- 松开按键时LED亮红色的话,发送关机的信号,‘NAS.POWEROFF’
如下是代码
import time, sys
from m5stack import *
OFF = 0x0
WHITE = 0xffffff
RED = 0xff0000
BLUE = 0x0000ff
BLUE_L = 0x00002F # 蓝色,低亮度
YELLOW = 0xffff00
GREEN = 0x00ff00
REBOOT = 1 # 标志常量
POWEROFF = 2 # 标志常量
cnt_in = 0 # NAS发送.字符的计数
led_flag = True # 是否点亮LED
while True:
cnt = 0 # 主循环循环次数
state = 0 # 标志变量
in_key = sys.stdin.read(1) # 堵塞式读取1个字符
if</