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

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

开源协议: GPL 3.0

发布时间:2021-03-03 21:54:03
  • 2.1w
  • 77
  • 231
描述
  1. 多款炫酷外壳(背壳透明、背壳磨砂、背壳实心、可贴水贴纸,电池可隐藏)
  2. 新增天数倒计时、B粉、图片随机播放等多项功能 点击下载
  3. 时钟芯片兼容BL8025T和RX8025T,TB买拆机几毛钱,适配固件V013-12,向下兼容
  4. 16MB已试验成功(B站动态),安信可的烧录工具可以烧录,需要勾选 DoNotChgBin 选项
  5. 平民级PCB彩印教程
  6. ESD需换成SMS05C,ch340不再费电,休眠电流降至0.02ma
  7. 如出现串口不断连接断开,磁珠改为0R电阻

 
 
 
  • 适配的硬件

  •  
  • 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的收发?等待提示连接失败即可操作其他
  • 在配网界面更换城市后无法即时刷新天气数据,不影响天气模式正常使用,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就可以换行了,该字符就置入下一行

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

设计图

V1.42-加入BL8025T时钟芯片

在编辑器中打开

V1.42-加入BL8025T时钟芯片

在编辑器中打开
ID Name Designator Footprint Quantity
1 104 C1,C2,C3,C4,C16,C50 C_0603_1608METRIC_PAD1.05X0.95MM_HANDSOLDER 6
2 10UF,16V C5,C6,C7,C8,C11,C14,C15,C25,C27,C28,C29,C30,C31,C32,C33,C34,C35,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48,C49,C51 C_0805_2012METRIC_PAD1.15X1.40MM_HANDSOLDER 31
3 106 C9 C_0805_2012METRIC_PAD1.15X1.40MM_HANDSOLDER 1
4 4.7UF,50V C10 C_0805_2012METRIC 1
5 1UF,50V C12,C13 C_0805_2012METRIC 2
6 1UF,50V C17,C18,C19,C20,C21,C22,C23,C24,C26 C_0402_1005METRIC_PAD0.74X0.62MM_HANDSOLDER 9
7 100UF,10V,3528B C36 CP_EIA-3528-21_KEMET-B_PAD1.50X2.35MM_HANDSOLDER 1
8 LED D1 LED_0805_2012METRIC 1
9 1N5819 D2,D3,D4,D5 D_SOD-323_HANDSOLDERING 4
10 USB_C_Receptacle_USB2.0 J1 TYPE-C-12P 1
11 BAT PADS J2 PINHEADER_1X02_P2.54MM_VERTICAL 1
12 ZH 1.5MM J3 JST_PH_B2B-PH-SM4-TB_1X02-1MP_P2.00MM_VERTICAL 1
13 后翻盖上下接 J4 HIROSE_FH12-6S-0.5SH_1X06-1MP_P0.50MM_HORIZONTAL 1
14 后翻盖上下接 J5 HIROSE_FH12-24S-0.5SH_1X24-1MP_P0.50MM_HORIZONTAL 1
15 10UH,1A L1 INDUCTANCE-0402 1
16 6.8UH L2 INDUCTANCE-252012H 1
17 SI2328DS/AO3400/CJ3400 Q1 SOT-23 1
18 S8050 Q2,Q3,Q4 SOT-23 3
19 CJ3401 Q5 SOT-23 1
20 CJ3400 Q6,Q8 SOT-23 2
21 100K R1 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 1
22 5.1K R2,R3,R26 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 3
23 0.5R R4 R_1206_3216METRIC 1
24 10K R5,R6,R7,R8,R9,R13,R14,R15,R16,R17,R18,R19,R21,R24,R25 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 15
25 1k R10 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 1
26 4.7K R11 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 1
27 1K R12 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 1
28 0.47 R20 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 1
29 78.7K R22 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 1
30 0R R23 R_1206_3216METRIC 1
31 15R R27 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 1
32 0R R28 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 1
33 330R R29,R30 R_0603_1608METRIC_PAD0.98X0.95MM_HANDSOLDER 2
34 10K RV1 POTENTIOMETER_DIAL_D16 1
35 Switch_SMD_2p U1,U2,U5 SW_SMD_2X4X3.5MM 3
36 SMS05C U3 SOT-23-6 1
37 CH340C U4 SOIC-16_3.9X9.9MM_P1.27MM 1
38 7脚两档 U6,U10 SW_SPDT_PCM12 2
39 TC4056 U7 SOP-8-SR 1
40 ME6210A33M3G U8,U11 SOT-23 2
41 8266 U9 8266-12F 1
42 SHT30-DIS U12 DFN-8-1EP_2X2MM_P0.5MM_EP0.6X1.2MM 1
43 AP3032 U13 SOT-23-6_HANDSOLDERING 1
44 BL8025T U14 BL8025T 1

展开

工程成员

服务时间

周一至周五 9:00~18:00
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 立创EDA微信号

    easyeda

  • QQ交流群

    664186054

  • 开源平台公众号

    oshwhub