1、简单易用,可快速上手
2、流畅支持300个器件或1000个焊盘以下的设计规模
3、支持简单的电路仿真
4、面向学生、老师、创客
1、全新的交互和界面
2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计
3、更严谨的设计约束,更规范的流程
4、面向企业、更专业的用户
标准版 天气墨水屏-添加时钟芯片
简介:天气、TXT阅读器、时钟、配网、前置光,多款炫酷外壳
开源协议: GPL 3.0
2.HalfSweet(有温湿度芯片)
3.DUCK (无温湿度芯片)
~~~~~~~~~~~~~~~~~~~~~~~~~~ 分割,可以不看 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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就可以换行了,该字符就置入下一行
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
展开
加载中...
是否需要添加此工程到专辑?