演示视频:
经过几个月的反复修改,SensorTile第一版完成了。首先感谢EEWORLD和ST提供了这次活动机会,可以尝试新的想法,并最终实现了。加深了对ST的传感器、低功耗MCU的认识,同时也感觉micropython真的很好用。
在DIY过程中,遇到不少问题,好在都一一解决了,还学到不少新东西。首先是移植micropython中遇到问题,发现不能驱动GPIOG。经过自己研究修改,发现是没有打开PORTG的时钟,micropython终于可以运行在SensorTile上了。这个问题也反馈到官方,并在micropython的源码中改进了。
接着发现传感器接口使用了三线方式的SPI(半双工),而mpy上不支持这种方式。仔细研究后发现,幸好传感器支持I2C/SPI两种接口,使用软件I2C方式,也可以很好的驱动传感器。
然后就是sensorTile怎样安装到怀表中。怀表的空间很紧凑,SensorTile虽小,但是加上USB小板、OLED和电池,就装不下了。最后经过反复考虑和比较,只好不用SensorTile自带的USB小板,而是自己扩展,并且替换了更薄的电池。
调试硬件中,突然发生了一个严重问题,USB突然无法识别出设备,怎么也连不上SensorTile了。经过仔细检查,发现是SensorTile上的LDO没有输出了,因为系统是宽压的,将3.3V直接提供给sensortile,暂时解决了电源问题。
硬件完成了,编写软件时又遇到bug,发现mpy在STM32L4上低功耗有bug,外中断和RTC都不能唤醒,而在STM32F405/F411上都是正常的。因为时间关系,这个问题只好先放下,等修正后在补上了。
还有一个遗憾是调试OLED时发现显示的时候偶数行没有显示出来(程序是没有问题的,在另外OLED上验证了)。应该是安装时碰到了OLED的排线,暂时没有办法拆开修了。幸好通过调整字体大小和位置,还能看清。
使用micropython编程很方便,这一次再次验证了这一点,很快就完成了界面部分和主要功能,包括:
- 电池充电状态
- 电池容量
- 气压传感器
- 三轴传感器
- 陀螺仪传感器
- 时间
运行识别、蓝牙通信、数据保存等功能还没有加上,等后面有空时补上了。
因为这次只需要做一个原型机,所以没有专门做PCB,而是完全手工方式打造,这样就不太方便。下一版预备重新设计电路,专门做一个PCB,不但方便使用,也可以容易添加功能。
DIY过程的一些图片:
原理图:
源码:
源码也已上传Github:
https://github.com/shaoziyang/SensorTilePocketWatch
使用方法:
先通过接口板将MicroPython固件下载到SensorTile中,然后才可以通过MicroPython编程。因为MicroPython官方还没有支持SensorTile,所以SenSorTile的MicroPython固件需要自己移植,可以使用我移植好的,也可以自己编译源码。下载固件时,需要注意不能使用dfu方式,因为目前的dfu工具对于STM32L476存在问题,下载后的程序不完整,不能运行。目前可以通过STLink和STM32 ST-LINK Utility进行下载。
https://github.com/shaoziyang/MicroPython_firmware/tree/master/SensorTile
然后将源码文件复制到SensorTile的PYBFLASH磁盘,就可以运行了。
怀表的按钮兼作唤醒、开盖、功能切换,一键多用。