M5Stack/ESP32学习笔记(15)—— 入手M5Stack ATOM Lite

本文介绍了如何使用M5Stack ATOM Lite通过MicroPython系统连接到NAS,实现远程控制NAS的重启和关机功能。通过编写boot.py和main.py,配置ATOM按键检测,配合NAS端的python程序,实现不同按键时长对应不同的NAS操作。
摘要由CSDN通过智能技术生成

入手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</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值