本帖最后由 沧海笑1122 于 2019-7-14 22:52 编辑

【项目的故事】

在极客玩具中,我一直喜欢穿戴类和小车类。前后做过两只运动心率表,并且参与过麦步手表的测试。TTGO最新出品了一块叫做T-Watch的手表,实际上,是一个可以做手表的穿戴平台,就将我原来的一个基于esp32的电子秤玩具移植到这块手表上,成为一个手表电子秤。使得大家对这个新玩具能有所了解吧。

all.jpg (77.76 KB, 下载次数: 9)

2019-7-14 22:40 上传

【T-watch的主要配置】

芯片:ESP32(配置比较强:FLASH QSPI闪存16 MB / PSRAM 8 MB)

PMU电源管理:Axp202

显示屏:1.54英寸LCD电容式触摸屏

传感器:BMA423三轴加速度计,集成步数算法,活动/跟踪识别,高级识别手势

RTC

CF8563

自定义按钮:一只(gpio36)

从硬件来看,亮点有这么几处:一是psram8兆(手表也提供了TF卡槽),二是PMU电源管理,可以对屏幕等外设进行单独电源管理;三是1.54寸彩屏+电容触摸;四是三轴加速度以及RTC授时等。

外观:42.5(宽)*46.5(长)*20(厚度),这是我手工测量,可能略有误差,但是也很精巧了。其中为了穿插表带,厚度至少多出来了4mm空间。

all2.jpg (165.48 KB, 下载次数: 7)

2019-7-14 22:40 上传

【micropython电子秤移植】

T-Watch出厂时,内置的是一个arduino的demo,是一块很漂亮的带有记步功能以及BLE\WIFI\PMU等设置的手表。带屏幕关闭以及唤醒,如果你希望单纯的手表,实际上就可以直接上手了。

这是一个成熟项目,我已经在esp32(mpy)上实现过,是基于M5STACK的平台。

这次移植,主要是要解决PMU电源管理的驱动以及TFT显示器的驱动问题。

(1)感谢TTGO的高手lewis师兄,他将axp202的电源管理模块的驱动移植到了Mpy上,而且是非常完整的移植,对axp202的功能全部开放,方便玩家调用。我这次电子秤移植实际上只是使用到了很少一部分。

(2)这块手表的显示器驱动IC是ST7789V,这是常用于智能手表的驱动芯片。Lewis师兄将其移植到了mpy上,从玩家讨论来看,也有国外玩家先后尝试了mpy以及纯C两种7789的驱动后,据说后者的速度明显提升,但我们这次用的还是lewis师兄移植的mpy库,可以感受到,在整体刷屏上,速度的确比较慢,这也是后续需要完善的吧。

我在lewis师兄的工作基础上,借鉴了github上一位玩家的9341库,将字符显示以及画点、画线、实线矩形等功能做了一点移植。这样,手表电子秤的基本功能就具备了。

【制作中干货一二】

一是关于字模的制作

参考github玩家对9341的使用,玩家提供了一个转换工具,叫做font_to_py.py,这是一个非常有用的小工具,可以转换ttf字库至python库,然后由mpy直接调用。非常方便。

Step1:[mw_shl_code=python,true]import freetype[/mw_shl_code]

fontpy.png (111.86 KB, 下载次数: 8)

2019-7-14 22:40 上传

这个叫做 freetype的模块需要自行pip安装

Step2:寻找自己喜欢的字库,我找到了一款七段数码管的字库,digital-7.ttf,然后转变为Mpy可以调用的字库。

[mw_shl_code=python,true]Python font_to_py.py digital-7.ttf 32 digital-7.py[/mw_shl_code]

其中32就是生成新字库的高度。然后你就可以看到,多了一个名为digital-7.py的七段数码管字模文件啦。

二是代码,由于注释比较详细,请玩家自行查阅

[mw_shl_code=python,true]#--------------------------------

# date:2019-07-03

# 项目:基于T-watch+hx711的电子秤

# ST7789以及apx202,来自lewis师兄提供,st7789的部分功能(画线、画点以及text显示来自https://github.com/jeffmer/micropython-ili9341)

# HX711库,来自https://pypi.org/

# 实现功能:校准以及校准参数存储,电子秤称重

#---------------------------------

import time

import ustruct

import framebuf

#import glcdfont

import tt14

#import tt24

#import tt32

import digital7

import bauhs93

from utime import sleep_us

from micropython import const

from machine import Pin, SPI

from hx711 import HX711

from st7789class import ST7789

#---------TFT pin 定义

TFT_RST_PIN = const(0)

TFT_LED_PIN = const(12)

TFT_DC_PIN = const(27)

TFT_CS_PIN = const(5)

TFT_CLK_PIN = const(18)

TFT_MISO_PIN = const(2)

TFT_MOSI_PIN = const(19)

OPEN_AXP202 = True

buttonA = Pin(36, Pin.IN)     # create input pin on GPIO36

if OPEN_AXP202:

import axp202  #导入AXP202电源模块管理库

def color565(r, g, b):

return (r & 0xf8) << 8 | (g & 0xfc) << 3 | b >> 3

global val_cort  #存放电子秤校正系数

def drawbutton():

#显示按钮以及文字

display.erase()

display.set_pos(150,20)

display.set_font(tt14)

display.print('CORR')

display.rect(130,10,80,30,0xF700)  #button_CORR

class Scales(HX711):

def __init__(self, d_out, pd_sck):

super(Scales, self).__init__(d_out, pd_sck)

self.offset = 0

def reset(self):

self.power_off()

self.power_on()

def tare(self):

self.offset = self.read()

#self.offset = val_tare

def raw_value(self):

return self.read() - self.offset

def stable_value(self, reads=10, delay_us=500):

values = []

for _ in range(reads):

values.append(self.raw_value())

sleep_us(delay_us)

return self._stabilizer(values)

@staticmethod

def _stabilizer(values, deviation=10):

weights = []

for prev in values:

weights.append(sum([1 for current in values if abs(prev - current) / (prev / 100) <= deviation]))

return sorted(zip(values, weights), key=lambda x: x[1]).pop()[0]

if OPEN_AXP202:

a = axp202.PMU()

a.setChgLEDMode(axp202.AXP20X_LED_BLINK_1HZ) #充电led模式

a.enablePower(axp202.AXP202_LDO2) #打开LDO2路电源

a.setLDO2Voltage(3300) #设置电压3.3v

bl = Pin(TFT_LED_PIN, Pin.OUT)

bl.value(1)  #屏幕背光打开

spi = SPI(baudrate=40000000, miso=Pin(TFT_MISO_PIN), mosi=Pin(

TFT_MOSI_PIN, Pin.OUT), sck=Pin(TFT_CLK_PIN, Pin.OUT))

display = ST7789(spi, cs=Pin(TFT_CS_PIN), dc=Pin(TFT_DC_PIN), rst=None)   #声明一个ST7789实例

'''

1、建立一个scale实例

2、从tare.txt当中提取皮重数据---赋值val_tare,设置偏移量用于去皮纠偏

'''

scales = Scales(d_out=21, pd_sck=22)

#读出预存的校正系数

with open('cort.txt', 'r') as myfile:

val_cort=float(myfile.read().replace('\n', ''))  #读出预存的校正系数

myfile.close()

scales.tare() #初始化时进行一次去皮

display.erase()

display.set_pos(100,100)

display.set_font(bauhs93) #设置字体bauhs93

display.print('TTGO')

time.sleep(3)

display.erase()

#显示按钮以及文字

drawbutton()

while True:

if buttonA.value()==0: #校准按钮

time.sleep(0.2)

display.erase()

display.set_pos(100,100)

display.set_font(tt14)

display.print(&quot

ut 100g please..") #请先放上100g的砝码

sleep_us(5000000)

val100 = scales.stable_value()  #把100g的对应稳定读数放入val100

display.print(str(val100)) #屏显200g对应度数

display.print(&quot

ut 200g please..") #请先放上100g的砝码

sleep_us(5000000)

val200 = scales.stable_value()  #把200g的对应稳定读数放入val200

display.set_pos(100,160)

display.print(str(val200)) #屏显200g对应度数        '''计算校正系统'''

val_cort=100/(val200-val100)

display.print(str(val_cort)) #屏显校正系数

display.print("take away 200g..")

sleep_us(5000000)

'''将系数放入cort.txt当中'''

f = open('cort.txt', 'w')  #打开cort.txt文件,以write方式,准备写入参数

f.write(str(val_cort))   #把刚才计算的校正系统写入cort.txt中

f.close()

display.erase()

#显示按钮以及文字

drawbutton()

display.set_pos(80,100)

display.set_font(digital7)

display.print('                           ')

val = val_cort*scales.stable_value() #带有折算补偿系数的计算,如-0.00051235

print(val)

display.set_pos(80,100)

display.set_font(digital7) #设置七段式数码管字体

display.print(str("{:.1f}".format(val)))

sleep_us(1000000)[/mw_shl_code]

【图片一组】

poweron1.jpg (161.76 KB, 下载次数: 6)

2019-7-14 22:40 上传

poweron.jpg (116.03 KB, 下载次数: 5)

2019-7-14 22:40 上传

w200.jpg (195.25 KB, 下载次数: 4)

2019-7-14 22:40 上传

w1.jpg (156.95 KB, 下载次数: 4)

2019-7-14 22:40 上传

分别是电子秤的校准以及测量过程,我用了两个砝码(100、200克)进行校准,没有考虑温度补偿,设立了一个文本文件存储补偿系数,下次开机时,直接读取就可以了,这就是Mpy的方便之处,不像arduino在esp32中,还需要模拟eeprom库开写入类似的系数。

corr.jpg (84.17 KB, 下载次数: 6)

2019-7-14 22:40 上传

【小结】

TWatch优势:(1)硬件配置较好,包括psram\tf卡槽等,套件中提供了一个开发者底板,里面用排母引出来了大量gpio,还有一个IIC扩展槽。姿态传感器以及RTC非常容易开发出好玩的穿戴应用。(2)tw并非是一块手表,而是一个像手表的极客平台。这次TTGO专门考虑了将成熟的手表固件准备了可烧写的文件格式,玩家即便不懂编程,也可以将分享的固件烧写到手表里,从而享受不同的体验。

后续需要提升的希望:(1)希望在mpy的支持方面加大力度,尤其是GUI的开发,类似scratch等,esp32的硬件不断强大、程序的复杂性也日益提升,无论从降低玩家门槛、提升用户体验还是提升工作效率等方面而言,mpy都值得更加关注。(2)进一步丰富社区,在手表固件的开发、分享等方面做得更好。

【分享】

手表电子秤所需要的micropython代码、st7789库、hx711库以及fonts字模,均打包在附件中,与各位玩家分享。

2019-7-14 22:42 上传

点击文件名下载附件

micropython gui_T-Watch手表初试micropython之电子秤教程相关推荐

  1. micropython移植教程_【教程】智能编程T-Watch手表初试micropython之电子秤教程

    原标题:[教程]智能编程T-Watch手表初试micropython之电子秤教程 [项目的故事] 在极客玩具中,我一直喜欢穿戴类和小车类.前后做过两只运动心率表,并且参与过麦步手表的测试.TTGO最新 ...

  2. pebble刷android wear,Pebble智能手表刷官方中文固件教程

    Pebble智能手表目前已经有了官方版本的中文固件,想要刷中文的用户可以动手了.很多用户对于怎么刷中文固件还不少很了解,下面小编将为大家带来详细的pebble智能手表刷官方中文固件教程. 据悉,Peb ...

  3. micropython lcd12864_Esp8266+ssd1306液晶屏+microPython(2020-09-25)

    image.png image.png ssd1306_test.py 保存后上传到芯片根文件夹就可 # 0.96英寸 ssd1306 液晶显示屏 # Esp8266的Pin5一般指芯片上的D1针脚. ...

  4. Micropython教程之TPYBoard开发板驱动舵机教程(萝卜学科编程教育)

    2019独角兽企业重金招聘Python工程师标准>>> 大家应该都看到过机器人的手臂啊腿脚啊什么的一抽一抽的在动弹吧...是不是和机械舞一样的有节奏,现在很多机器人模型里面的动力器件 ...

  5. 【MicroPython】基于microbit的MicroPython编程--HELLO WORLD

    基于microbit的MicroPython编程--HELLO WORLD hello world python知识 显示图像 程序一:显示内置图形 程序二:显示自定义图形 ==python知识== ...

  6. micropython esp32手册_编译micropython遇到的几个问题(ESP32平台)

    在编译esp32的micropython时候根据官方的github步骤来,但是还是有几个问题.特此记录一下: 1.执行make erase 擦除esp32的flash时候失败.原因与解决办法:查看mi ...

  7. micropython lcd_Esp8266+PCF8574 LCD1602液晶显示屏+MicroPython测试(2020-09-25)

    image.png Esp8266,刷microPython 1.12版本的固件,测试通过 esp8266_i2c_lcd_test.py # PCF8574 LCD1602 测试模块 ( 2020. ...

  8. micropython驱动tft_nRF52832-Bluefruit52学习之MicroPython开发(5)-- TFT屏驱动ST7789

    nRF52832技术交流群:680723714 nRF52832-Bluefruit52核心板详细介绍: https://blog.csdn.net/solar_Lan/article/details ...

  9. micropython应用触摸屏_[TPYBoard - Micropython之会python就能做硬件 2] 利用micropython控制NOKIA 5110屏...

    欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板  一块 2.DS3231模块   一块 3.NOKIA 5110 LCD 屏 一块 4.杜邦线:若干 ===感 ...

最新文章

  1. 《HBase权威指南》一导读
  2. 千万条数据,Stack Overflow是如何实现快速分页的
  3. 160 - 27 Cosh.1
  4. (原)举例说明C#自定义配置文件app.config及如何读取配置内容(在app.config加入自定义的XML节点)?...
  5. 3d正方体旋转相册代码_3d旋转正方体的多种html和css制作方法和相关知识复习讲解
  6. js html 拼接,JavaScript concat() 方法
  7. 创新数字音频处理技术带来消费电子产品差异化用户体验(转)
  8. 大数据分析平台的功能有哪些
  9. 实测iOS Dynamic Framework 对 App 启动时间的影响效果
  10. 大脑网络结构、功能和控制的物理学
  11. 程序员真的干到35就干不动了吗?
  12. Python将PDF转换为图片
  13. Python基本数据类型字符串操作总结
  14. Apple HomeKit
  15. 常州华翎六月风钢管舞惊人的优势
  16. Android获取手机WiFi IP地址,MAC地址和网关地址程序实例
  17. Java没有友联(函数)这个概念怎么办?
  18. 推荐 8 个我私藏的大厂技术大佬公众号 !助你高速成长!
  19. 读书笔记三:《运营之光》互联网运营方法论与自白(上)
  20. RegExp 使用说明

热门文章

  1. latex 中画✔(打勾)
  2. 老李聊股:海澜之家、唐人神
  3. 基于docker jenkins nginx gitee实现前端自动化部署
  4. 编程之美 - 读书笔记 - 烙饼问题与搜索树
  5. 传智播客-刘意-java深入浅出精华版学习笔记Day05
  6. Java实现延时的方法
  7. while true java_Java中对while(true)的理解
  8. python while true跳出条件_while(true)何时跳出循环?
  9. 艾永亮:超级产品战略告诉你,怎样才能吸引到用户使用你的产品
  10. 测量数据采集分析平台