用SensorTile开发板打造的智能怀表
使用ST SensorTile开发板做的智能怀表,可以显示时间、传感器数据。已经实现了基本功能,下一步还将自动记录数据和分析数据,并通过蓝牙上传。
本项目的创新在于完全使用了MicroPython进行软件开发,并将SensorTile安装到了怀表中,可以实现完整的怀表功能。使用MicroPython读取SensorTile传感器,并在OLED上显示出来。怀表的按钮除了可以开盖,也兼作唤醒开关和功能切换键,每按一次切换一个功能界面,长按将自动复位。USB接口除了可以作为micropython的程序下载接口,还可以给电池充电。
除了可以作为怀表外,使用者还可以通过micropython编程,增加或修改程序,实现更多需要的功能。
硬件上使用SensorTile做核心版,低功耗高性能的STM32L476加上多种传感器,在配合OLED。使用USB做数据接口,兼作充电功能。
软件上使用micropython,不但简化了编程,可以完全不看硬件层,一般人都可以设计自己的功能,让智能怀表的应用充满了各种可能。
经过几个月的反复修改,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过程的一些图片:
原理图: