发作品签到
标准版

天气墨水屏-添加时钟芯片

工程标签

6.2w
0
0
105

简介

天气、TXT阅读器、时钟、配网、前置光,多款炫酷外壳

简介:天气、TXT阅读器、时钟、配网、前置光,多款炫酷外壳

开源协议

GPL 3.0

创建时间:2021-03-03 21:54:03更新时间:2022-07-24 16:35:47

描述

  1. 此工程为旧版本,新版本含SD卡https://oshwhub.com/jie326513988/SDka-mo-shui-ping-yue-du-qi
  2. 多款炫酷外壳(背壳透明、背壳磨砂、背壳实心、可贴水贴纸,电池可隐藏)
  3. 新增天数倒计时、B粉、图片随机播放、阅读模式时钟等多项功能,文件管理器已修复 点击下载
  4. 时钟芯片兼容BL8025T和RX8025T,TB买拆机几毛钱,适配固件V013-12,向下兼容
  5. 16MB已试验成功(B站动态),安信可的烧录工具可以烧录,需要勾选 DoNotChgBin 选项
  6. 平民级PCB彩印教程
  7. ESD需换成SMS05C,ch340不再费电,休眠电流降至0.02ma
  8. 如出现串口不断连接断开,磁珠改为0R电阻
  9. 测量电池电压电路有点缺陷

 
 
 
  • 适配的硬件

  •  
  • 1.本工程

  • 由于是从KICAD导入的,或许会有疏漏使用立创EDA导出的话要检查清楚,最好是使用我提供的打板文件打板。
  • 兼容前置光墨水屏-大连佳显T5D,使用普通墨水屏不焊前置光驱动电路即可(前置光外壳已上传)
  • 添加透明亚克力后盖(已上传,含亚克力尺寸)
  • 优化CH340漏电现象(ESD芯片问题),整机休眠低至0.02ma
  • 温湿度芯片-SHT30
  • ESD芯片-SMS05C
    • SRV05-4为双向不适合此电路,其他双向ESD芯片也不行
    • 因为双向ESD芯片在不插USB时会有电漏到ch340的开关MOS,导致ch340工作浪费电
  • 性能更佳封装更小的LDO-ME6210A33M3G
  • MLCC电容阵列
  • 加长焊盘,物件间距合理,不再手残
  • 必须插电池并打开拨动开关进行烧录程序,不支持USB&锂电池切换电源
  • 前置光亮度调到最亮时对屏幕刷新有少许干扰,其他时候正常,不需要前置光不焊不影响
  • 适配本工程的3D打印外壳-普通版已放出
  • 适配本工程的3D打印外壳-普通版-背壳透明已放出
  • 部分硬件有参考HalfSweet和DUCK,感谢!

 

  2.HalfSweet(有温湿度芯片)

  3.DUCK (无温湿度芯片

  •  

 

介绍

 

功能简介

  • 天气模式
    • 天气实况、未来2天天气
    • 紫外线强度、室外环境湿度、风力等级
    • 中间显示一句话,网络获取或自定义
    • 电量显示,电压或百分比
    • 室内温湿度显示(需硬件支持sht30芯片)
    • 自定义夜间不更新/更新
  • 阅读模式
    • 多达2.8mb的使用空间,最多可存3本书
    • 使用索引方式,准确计算页数,可任意跳转,无限上一页
    • 记忆功能,自动恢复上一次看的书籍和页数
    • 电量显示
    • 显示时间
    • 快速换页
  • 时钟模式
    • 超大数字显示,不再眼瞎
    • 自定义显示模式,日期/简洁
    • 自定义校准间隔
    • 自定义是否开启强制校准
    • 自定义离线校准补偿
  • 配网模式
    • 自动、手动选择配置网络
    • 配置天气KEY和城市
    • 文件管理器
    • 丰富的设置项
    • 屏幕实时消息回传提示
    • 预留OTA接口
    • 上传大小判断
  • 自定义图片模式
    • 显示自定义的bmp图片,需到配网-文件管理器启用
  • 天数倒计时
  • B站粉丝显示

 

按键操作逻辑

  • 正视图从左到右依次为 按键1 按键2 按键3 (按键3-GPIO5 按键2-GPIO0)
  • 按住按键3不放,再按复位按键(按键1),即可进入模式选择界面
  • 所有界面的按键操作逻辑为:
    • 单独短按为切换选项
    • 组合按键为确认操作或调出菜单:先按着按键3不放,再短按一下按键2,此时要释放按键3才会生效
    • 新版已改成长按按键3为确认操作
  • 按键2不可按得太快,不能在屏幕刷新的时候按,会导致屏幕死机,原因是按键2与屏幕刷新共用一个io口

 

注意事项,请耐心看完

  • 天气获取需要心知天气私钥(20次/分钟),需要自己去申请,然后在配网界面输入即可。
  • 原版U8g2_for_Adafruit_GFX库无法使用大字库,故我对该库做了修改,码云或群里下载
  • 其他库均可在库管理器下载的到
  • 无法连接wifi可能是被路由器拉黑或网络差,天线附近需要净空不能有飞线,电池挡住天线也可能会有影响
  • 无法获取天气信息请检查城市名是否填对,免费用户只能查看到地级市
  • 误低压休眠的请检查电池测量电路是否正常,电池电压是否大于3.2V(搭板的玩家自己给A0加上分压电路接上5V,分压后不能超过1V,否则烧ADC)
  • 非本工程的MOS管(排线附近)使用起来发热严重可用cj3400代替,LDO使用ME6210A33PG、ME6209A33PG代替(压降越低越好)
  • 如无法连接8266的热点或无法打开配网页,请检查手机是否开启了智能选网模式
  • 电压低于3.45V的时候上传文件和需要扫描周边网络模式的有机会卡死(我的硬件电压低至3.3V仍然可以进行网络操作)
  • 电池可以用:303450-500mah(适配本项目隐藏电池的背透外壳),602650-650mah(适配本项目外壳),601550-450mah(适配本项目的背透外壳),902030-500mah(DUCK&半糖的外壳)

 

使用到的库

 

目前已知BUG
  • 电量较低时进入配网模式有几率重启,多试几次就好
  • 电量较低时会导致上传文件、扫描周边网络时卡死。   (我的硬件电压低至3.3V仍然可以进行网络操作)
  • 天气模式载入数据有极小几率会重启系统,EXCCAUSE Code(3),加载或存储期间的处理器内部物理地址或数据错误?
  • 在配网页面连接无效的的WIFI会卡顿一段时间,有相应提示。可能是硬件问题,无法同时进行STA和AP的收发?等待提示连接失败即可操作其他
  • 无法建立索引检查TXT文本结尾不能有换行
  • 16MB的固件最大只支持9.9MB的TXT文本
  • 在配网界面更换城市后无法即时刷新天气数据,不影响天气模式正常使用,https get数据失败,暂无能力解决。(已解决)


 
 

一些数据来源注明

1.根据《中华人民共和国气象法》第二十五条,在您使用心知天气的数据服务或产品时,必须注明数据服务来源
2.一言服务由 hitokoto.cn 提供

请勿用于大规模商业用途

 

~~~~~~~~~~~~~~~~~~~~~~~~~~ 分割,可以不看 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

8266如何读取TXT文件

比较多的人问我的墨水屏看小说是怎么做到的

这里仅简单的讲一下怎么用8266读取FLASH内的TXT文件(只限UTF-8),不做墨水屏测试

 

需要的前置知识

ASCIⅡ编码、UTF-8编码、Arduino 8266开发基础、文件系统基础

 

需要的硬件

带串口、带FLASH的8266模块,容量不限。

 

原理

首先我们需要弄明白编码知识,和文件使用的编码类型,知道这些我们才能对文件进行相应的处理,这里以UTF-8(3字节)的TXT文本为例

一个字节由8个二进制位组成的

ASCIⅡ,范围0-127,即00000000 到 01111111

ASCIⅡ 扩展, 范围128-255,即1000000 到 11111111

 

UTF-8编码规则:

如果为一个字节,那么这个8位字节的第一位就为0,即是ASCIⅡ的全部,0000 0000 到 0111 1111 (0-127)

如果为两个字节,那么第一个字节的前4位为1100

如果为三个字节,那么第一个字节的前4位为1110

 

从Unicode字符集中规定0x4E00代表汉字4E00的十进制是19968,二进制是100 1110 0000 0000,根据UTF-8的编码规则,中文需要三个字节才能存储,转化结果为11100100 10111000 10000000。

 

中文为三字节1110XXXX XXXXXXXX XXXXXXXX ,即1110 XXXX开头

ASCIⅡ扩展等二字节的为1100XXXX XXXXXXXX,即1100 XXXX开头

ASCIⅡ就是0-127了,直接判断 >=0&&<=127 就行了

所以只要判断读取的首字节是什么开头就能知道它是否是中文或是ASCIⅡ

所以我们使用文件系统读取文件的每个字符的首字节,然后进行判读该字节是什么类型,中文?ASCIⅡ扩展或其他两字节?ASCIⅡ?

 

核心代码如下,最后有附件完整示例代码

  Serial.println("********* 单个字符输出 ********* ");
  String zf = "";        //输出的单个字符
  uint16_t zf_count = 0; //统计字符个数
  txtFile = LittleFS.open("txt_test.txt", "r");  //打开txt文件
  if (txtFile != 1)  Serial.println("txt_test.txt 文件不存在");
  while (txtFile.available())//开始读取
  {
    zf_count++;
    char c = txtFile.read();//读取一个字节
    byte a = B11100000;
    byte b = c & a;
    if (b == B11100000)//中文等 3个字节字符
    {
      zf += c;                    //第一个字节
      zf += txtFile.read();  //第二个字节
      zf += txtFile.read();  //第三个字节
    }
    else if (b == B11000000) //ascii扩展或其他2个字节字符
    {
      zf += c;                    //第一个字节
      zf += txtFile.read();  //第二个字节
    }
    else if (c >= 0 && c <= 127) //ascii字符
    {
      zf += c; //第一个字节
    }
    Serial.print("第" + String(zf_count) + "个字符:");
    Serial.println(zf);
    zf = "";
  }
  txtFile.close(); //关闭文件

 

 

扩展

再讲一下显示到墨水屏的原理吧,因每个库的操作方法都不相同,这里以GXEPD2库和U8g2_for_Adafruit_GFX为例。

我们从上面的代码知道了怎么去处理UTF-8的字符了,只需要吧每个字符加起来,加够一行就换行

具体能分多少行就由屏幕的宽度决定

一行显示多少字就由屏幕的长度决定

比如2.9寸横屏模式下,长度为296,宽度为128

使用14*14的字体的话,就能分128/14,取整就是9行 ,每行296/14,取整就是21个中文

 

如果都是中文的话就可以每获取21个字符就换行,使用String[ ]存着就行,存够9行了就开始显示

 

要是有数字、英文、符号等其他非14个像素的字符还得另做判断

具体操作方法就是每获取一个字符就计算这个字符的长度,将长度进行累积,若即将到来的字符加入累积长度后会超过296就可以换行了,该字符就置入下一行

~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
flash_download_tool_v3.8.7_0.zip
2880
2
前置光演示.mp4
8358
3
8266TXT读取例程.zip
281
4
【甘草】2.9墨水屏普通外壳.zip
156
5
【甘草】2.9墨水屏前置光T5D外壳.zip
78
6
【半糖&duck】2.9墨水屏外壳Micro-下沉上盖-螺丝沉孔-M1.2X5.zip
84
7
【半糖&duck】2.9墨水屏外壳typec-下沉上盖-螺丝沉孔-M1.2X5.zip
109
8
【甘草】2.9墨水屏-后壳透明亚克力.zip
114
9
打板文件-墨水屏V1.42-BL80125T.zip
248
10
ibom-墨水屏V1.42-BL80125T.zip
164
11
【甘草】隐藏电池款背透外壳.zip
101
12
立创直接下单BOM(不含前置光驱动电路)2021-11-16.xls
270
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航