爱易族 - Arduino
type: channel
link: http://www.yizu.org/tag/Arduino
items: GT20L16S1Y字库芯片的Arduino示例代码
items: Arduino用Wire库驱动SS1306 OLED显示屏（I2C）
items: 基于arduboy_homemade自制Arduboy的一些说明
items: esp32c3驱动GM12864-59N屏（Arduino）
items: u8g2库适配GMG12864-03A显示屏模块（Arduino）
items: esp32c3从SD卡读取图像并显示（Arduino_GFX）
items: Arduino_GFX驱动2.4'SPI串口240x320TFT彩屏(ST7789)
items: ESP32-C3(Arduino)驱动1.8寸128X160 ST7735S TFT显示屏
items: esp8266+DS1302+LCD1602+DHT11+无源蜂鸣器制作网络时钟升级版
items: 合宙ESP32-C3通过网页配置WIFI存储在EEPROM

GT20L16S1Y字库芯片的Arduino示例代码
type: item
date: 2026-02-09T22:27:00+08:00
description: GT20L16S1Y字库芯片比较常用，现把调试通过的Arduino代码记录一下。以下代码需使用U8G2图形库。接线方面字库芯片和LCD屏共用SPI接口，以CS引脚区分数据传输。#include <Arduino.h> #include <U8g2lib.h> #include <SPI.h> // --- 硬件定义 --- #define PIN_LCD_CS 7 #define PIN_LCD_DC 6 #define PIN_LCD_RST 11 #define PIN_FONT_CS 5 // --- U8g2 初始化 --- // 你的屏幕构造函数 U8G2_ST7565_NHD_C12864_1_4W_HW_SPI u8g2(U8G2_R0, PIN_LCD_CS, PIN_LCD_DC, PIN_LCD_RST); // 汉字点阵缓冲区 (16x16点阵 = 32字节) uint8_t fontBuffer[32]; // 英文字符点阵缓冲8*16 uint8_t asciiBuffer[16]; void setup() { // 初始化串口 (调试用) Serial.begin(115200); // 初始化字库芯片引脚 pinMode(PIN_FONT_CS, OUTPUT); digitalWrite(PIN_FONT_CS, HIGH); // 默认拉高，取消选中 // 初始化 SPI SPI.begin(); // 初始化屏幕 u8g2.begin(); } // 从GT20L16S1Y读取16x16汉字点阵数据 void readFontData(uint8_t msb, uint8_t lsb, uint8_t *buffer) { unsigned long address; // GT20L16S1Y GB2312 地址计算公式： // BaseAddr + ((MSB - 0xB0) * 94 + (LSB - 0xA1)) * 32 if (msb >= 0xA1 && msb <= 0xA3 && lsb >= 0xA1) { address = ((unsigned long)(msb - 0xA1) * 94 + (lsb - 0xA1)) * 32; } else if (msb >= 0xB0 && msb <= 0xF7 && lsb >= 0xA1) { address = ((unsigned long)(msb - 0xB0) * 94 + (lsb - 0xA1) + 846) * 32; } else if (msb == 0xA9 && lsb >= 0xA1) { address = (282 + (lsb - 0xA1)) * 32; } else { address = 0; } // 开始SPI事务读取字库 SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0)); // GT20L16S1Y支持高达30MHz+ digitalWrite(PIN_FONT_CS, LOW); // 发送读取命令 0x03 SPI.transfer(0x03); // 发送地址 (24位地址，高位在前) SPI.transfer((address >> 16) & 0xFF); SPI.transfer((address >> 8) & 0xFF); SPI.transfer(address & 0xFF); // 读取32个字节的点阵数据 for (int i = 0; i < 32; i++) { buffer[i] = SPI.transfer(0x00); } digitalWrite(PIN_FONT_CS, HIGH); SPI.endTransaction(); } // 从GT20L16S1Y读取ASCII8x16点阵数据 void readASCIIData(uint8_t asciichar, uint8_t *buffer) { unsigned long address = (asciichar-0x20)*16 + 0x3cf80; // 开始SPI事务读取字库 SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0)); // GT20L16S1Y支持高达30MHz+ digitalWrite(PIN_FONT_CS, LOW); // 发送读取命令 0x03 SPI.transfer(0x03); // 发送地址 (24位地址，高位在前) SPI.transfer((address >> 16) & 0xFF);…

Arduino用Wire库驱动SS1306 OLED显示屏（I2C）
type: item
date: 2024-11-15T20:46:18+08:00
description: 很基础的一段代码，用的硬件I2C，记录一下方便使用。#include <Wire.h> #include <avr/pgmspace.h> #define I2CADDR 0x3c // 显示屏I2C地址7位 #define WIRE_MAX 32 //WIRE一次最大发送字节数 const uint8_t display_init_sequence[] PROGMEM = { // Initialization Sequence 0xAE, // Display OFF (sleep mode) 0x20, 0x02, // Set Memory Addressing Mode // 00=Horizontal Addressing Mode; 01=Vertical Addressing Mode; // 10=Page Addressing Mode (RESET); 11=Invalid 0xB0, // Set Page Start Address for Page Addressing Mode, 0-7 0xC8, // Set COM Output Scan Direction 0x00, // ---set low column address display:0x00 sh1106:0x02 0x10, // ---set high column address 0x40, // --set start line address 0x81, 0x3F, // Set contrast control register 0xA1, // Set Segment Re-map. A0=address mapped; A1=address 127 mapped. 0xA6, // Set display mode. A6=Normal; A7=Inverse 0xA8, 0x3F, // Set multiplex ratio(1 to 64) 0xA4, // Output RAM to Display // 0xA4=Output follows RAM content; 0xA5,Output ignores RAM content 0xD3, 0x00, // Set display offset. 00 = no offset 0xD5, // --set display clock divide ratio/oscillator frequency 0xF0, // --set divide ratio 0xD9, 0x22, // Set pre-charge period 0xDA, 0x12, // Set com pins hardware configuration 0xDB, // --set vcomh 0x20, // 0x20,0.77xVcc 0x8D, 0x14, // Set DC-DC enable 0xAF // Display ON in normal mode }; /* Standard ASCII 6x8 font */ const uint8_t display_font6x8 [] PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sp 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, // ! 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, // " 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14, // # 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12, // $ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23, // % 0x00, 0x36, 0x49, 0x55, 0x22, 0x50, // & 0x00, 0x00, 0x05, 0x03, 0x00, 0x00, // ' 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00, // ( 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00, // ) 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14, // * 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, // + 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00, // , 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, // - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // . 0x00, 0x20, 0x10, 0x08, …

基于arduboy_homemade自制Arduboy的一些说明
type: item
date: 2023-11-17T21:30:00+08:00
description: 自制Arduboy有一个包arduboy_homemade可以简化我们arduino配置工作，并扩展了不少功能。地址如下https://github.com/MrBlinky/Arduboy-homemade-package。安装这个包只要在Arduino IDE文件->首选项,把https://raw.githubusercontent.com/MrBlinky/Arduboy-homemade-package/master/package_arduboy_homemade_index.json 添加到“其它开发板管理器地址”。然后在开发板管理中下载包即可，当然也可以在github下载zip包后离线添加。在github主页，有一个表格Pin wiring table，里面详细说明了引脚链接,为使用方便，直接复制在这儿。Arduboy functionArduboy Leonardo/MicroDevelopmentKitProMicro 5V (standard wiring)ProMicro 5V (alternate wiring)OLED CS12 PORTD66 PORTD7GND/(inverted CART_CS)**1/TXO PORTD3*OLED DC4 PORTD44 PORTD44 PORTD44 PORTD4OLED RST6 PORTD712 PORTD66 PORTD72 PORTD1*SPI SCK15 PORTB115 PORTB115 PORTB 115 PORTB1SPI MOSI16 PORTB216 PORTB216 PORTB216 PORTB2RGB LED RED10 PORTB6_10 PORTB610 PORTB6RGB LED GREEN11 PORTB7_-3 PORTD0*RGB LED BLUE9 PORTB517 PORTB09 PORTB59 PORTB5RxLED17 PORTB0_17 PORTB017 PORTB0TxLED30 PORTD5_30 PORTD530 PORTD5BUTTON UPA0 PORTF78 PORTB4A0 PORTF7A0 PORTF7BUTTON RIGHTA1 PORTF65 PORTC6A1 PORTF6A1 PORTF6BUTTON LEFTA2 PORTF59 PORTB5A2 PORTF5A2 PORTF5BUTTON DOWNA3 PORTF410 PORTB6A3 PORTF4A3 PORTF4BUTTON A (left)7 PORTE6A0 PORTF77 PORTE67 PORTE6BUTTON B (right)8 PORTB4A1 PORTF68 PORTB48 PORTB4SPEAKER PIN 15 PORTC6A2 PORTF55 PORTC65 PORTC6SPEAKER PIN 213 PORTC7A3 PORTF4**GND6 PORTD7*CART_CS (org)0 PORTD2*-0 PORTD2*0 PORTD2*CART_CS (new)2 PORTD1*-2 PORTD1*-SPI MISO14 PORTB3*--14 PORTB3*OLED SDA4 PORTD4*-4 PORTD4*4 PORTD4*OLED SCL6 PORTD7*-6 PORTD7*1/TXO PORTD3*安装完arduboy_homemade之后，把开发板设置为homemade Arduboy,自制Arduboy最简单的就是使用Arduino Pro micro这个板子。在开发板设置里面可以设置为如下图所示。Based on里面有两个关于Pro micro的选项。一个是标准接线，一个是备用接线，分别对应上面表格里面最右边两列，按照表格接线即可。Bootloader选项，选择Cathy3K(start with menu),可以支持外挂Flash芯片，上传游戏合集包。Display选择SSD1306是兼容性最强的，这样设置烧录的Bootloader可以直接使用编译好的游戏和游戏合集包，使用Arduboy-uploader这个工具上传即可。而使用其它的显示屏则只能使用Arduino IDE编译游戏源码上传游戏。我这里测试SH1103 IIC支持不好，画面抖动厉害。Flash select这个选项是专门针对外挂Flash芯片的，就是在PD2（RX1）和PD1（2）中选择一个作为SPIFlash的片选（CS）引脚，不外挂Flash可以不用理它。使用外挂Flash芯片还有一个要注意的是，我们SPI显示屏的SCL和SDA是和Flash芯片共用的，这个时候显示屏的CS引脚接地（始终激活）就行不通了，表现为在游戏菜单…

esp32c3驱动GM12864-59N屏（Arduino）
type: item
date: 2022-06-30T20:48:00+08:00
description: 这是一块IIC接口的LCD屏，驱动芯片是ST7567S，官方提供的示例代码有点问题，而u8g2库不支持这个屏。我在官方示例代码的基础上添加了显示ASCII字符的代码，基本上能够简单使用了(7月2日代码修改了一下)。代码如下：#define LCD_COLUMN_NUMBER 128 #define LCD_LINE_NUMBER 64 #define LCD_COLUMN_OFFSET 0 #define LCD_LINE_OFFSET 0 #define LCD_DIS_CHINA_ROT 0 #define LCD_COMMAND_NUMBER 16 #define LCD_PAGE_NUMBER (LCD_LINE_NUMBER/8) #define IIC_SCK 5 #define IIC_SDA 4 const unsigned char LCD_init_cmd[LCD_COMMAND_NUMBER]= { 0xe2, //软复位 0x2c, //升压步聚1 0x2e, //升压步聚2 0x2f, //升压步聚3 0xF8,//The Booster set 0x00,//The Booster set 4x 0xA2,//0xA2=1/9 Bias 0x23, //粗调对比度，可设置范围0x20～0x27 0x81, //微调对比度 0x38, //微调对比度的值，可设置范围0x00～0x3f 0xa2, //1/9 偏压比（bias） #if (LCD_DIS_CHINA_ROT == 180) 0xA1, //列扫描顺序：从右到右 0xc8, //行扫描顺序：从下到上 #else 0xA0, //列扫描顺序：从左到右 0xc0, //行扫描顺序：从上到下 #endif 0xa6, //正显 0x40, //起始行：第一行开始 0xaf, //开显示 }; static const unsigned char font[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, 0x18, 0x3C, 0x18, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x18, 0x24, 0x18, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x26, 0x29, 0x79, 0x29, 0x26, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x66, 0x89, 0x95, 0x6A, 0x60, 0x60, 0x60, 0x60, 0x60, 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x10, 0x20, 0x7E, 0x20, 0x10, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x30, 0x38, 0x3E, 0x38, 0x30, 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x23, 0x13, 0x08, 0x64, 0x62, 0x36, 0x49, 0x56, 0x2…

u8g2库适配GMG12864-03A显示屏模块（Arduino）
type: item
date: 2022-06-25T15:35:00+08:00
description: 淘宝上买的9.9包邮的GMG12864-03A单色LCD屏，ST7567驱动，12864分辨率，SPI接口，显示面积有33.2520.45mm,性价比还不错。但是这个屏u8g2库不支持，有一个U8G2_ST7567_OS12864_1_4W_SW_SPI，可以显示，但是直接使用显示上下颠倒，对比度有问题。好在店家提供了示例代码，按照示例代码把u8g2库改下就可以了。找到libraries\U8g2\src\clib\u8x8_d_st7567.c文件，打开找到屏幕初始化代码。static const uint8_t u8x8_st7567_os12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/7 */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x026), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 50>>2), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ };改成如下代码。static const uint8_t u8x8_st7567_os12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //从这里开始修改 U8X8_C(0x0e2), U8X8_C(0x0a6), U8X8_C(0x0c8), U8X8_C(0x02f), U8X8_C(0x026), U8X8_C(0x0a2), U8X8_C(0x0a1), U8X8_C(0x0f8), U8X8_C(0x000), U8X8_C(0x081), U8X8_C(0x009), U8X8_C(0x0af), //到这里修改结束 U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ };改好库以后打开u8g2库的Hello World示例代码，编辑如下。#include <Arduino.h> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif //这里用的合宙esp32c3开发板，根据接线修改引脚定义 U8G2_ST7567_OS12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 2, /* data=*/ 3, /* cs=*/ 7, /* dc=*/ 6, /*…

esp32c3从SD卡读取图像并显示（Arduino_GFX）
type: item
date: 2022-06-19T00:06:00+08:00
description: esp32c3的SD库在这里下载：https://github.com/nhatuan84/esp32-micro-sdcard显示屏库还是用Arduino_GFX:https://github.com/moononournation/Arduino_GFX/硬件链接如下：esp32c3 SD card ModuleGPIO02---->SCKGPIO03---->MOSIGPIO10---->MISOGPIO06---->CS3.3V------>3V3GND------->GNDesp32c3 1.8'TFTGPIO02---->SCLGPIO03---->SDAGPIO05---->DCGPIO07---->CSGPIO04---->RES3.3V------>VCCGND------->GND显示效果：#include <SPI.h> #include <mySD.h> #include <Arduino_GFX_Library.h> File bmpFile; unsigned short pic[0x5000]; // 128*160图像0x5000像素 byte aByte; // 1字节数据 Arduino_DataBus *bus = new Arduino_ESP32SPI(5 /* DC */, 7 /* CS */, 2 /* SCK */, 3 /* MOSI */); Arduino_GFX *gfx = new Arduino_ST7735(bus, 4 /* RST */, 2 /* 旋转屏幕180度 */, false); void setup() { Serial.begin(115200); //从SD卡读取图片 if (!SD.begin(6, 3, 10, 2)) { Serial.println("initialization SD card failed!"); return; } Serial.println("initialization SD card done."); bmpFile = SD.open("01.bmp", FILE_READ); if (bmpFile) { Serial.println("Reading 01.bmp..."); //显示图片 while (bmpFile.available()) { //跳过前0x36个字节的头 for (int i = 0; i < 0x36; i++) { Serial.print(bmpFile.read(), HEX); Serial.print(" "); } //把rgb24转换成rgb16 for (int i = 0; i < 0x5000; i++) { aByte = bmpFile.read(); pic[i] = (aByte * 32 / 256) << 11; aByte = bmpFile.read(); pic[i] |= (aByte * 64 / 256) << 5; aByte = bmpFile.read(); pic[i] |= (aByte * 32 / 256); } Serial.println("OK"); } bmpFile.close(); } else { Serial.println("error Reading 01.bmp"); } //显示图片 gfx->begin(); gfx->fillScreen(BLACK); gfx->draw16bitRGBBitmap(0, 0, pic, 128, 160); delay(1000); } void loop() { }

Arduino_GFX驱动2.4'SPI串口240x320TFT彩屏(ST7789)
type: item
date: 2022-06-03T18:57:00+08:00
description: TFT屏型号GMT024-8p10p-SPI VER1.1，金逸晨的，2.4寸，分辨率240x320，参数还不错，淘宝价23.5元。试了TFT_eSPI.h，发现无法正常使用，所以又找了一个库，非常不错，地址：https://github.com/moononournation/Arduino_GFX/，能够适配的驱动芯片非常丰富，功能也不错。引脚配置按如下。/* TFT ESP-C3 GND--->GND VCC--->3.3V SCL--->IO02 SDA--->IO03 RESET->IO10 A0---->IO06 CS---->IO07 BL---->IO11 */使用代码如下：#include <Arduino_GFX_Library.h> Arduino_DataBus *bus = new Arduino_ESP32SPI(6 /* DC */,7 /* CS */,2 /* SCK */,3 /* MOSI */); Arduino_GFX *gfx = new Arduino_ST7789(bus,10 /* RST */,0,false,240,320); void setup(void) { gfx->begin(); gfx->fillScreen(BLUE); pinMode(11, OUTPUT);//背光 digitalWrite(11, HIGH); gfx->setCursor(0, 10); gfx->setTextColor(RED,YELLOW); gfx->setTextSize(2); gfx->println("Current milliseconds:"); delay(1000); } void loop() { gfx->setCursor(10, 70); gfx->print(millis()); delay(100); }

ESP32-C3(Arduino)驱动1.8寸128X160 ST7735S TFT显示屏
type: item
date: 2022-05-31T22:11:00+08:00
description: 这个屏是真的便宜，和我手里的ESP32-C3开发板同一家淘宝店，同样9.9元包邮的价格，却有1.8寸的大小，128*160的分辨率，还是彩屏，这就够了。比那种差不多价格0.96寸的OLED单色屏良心多了。就是下面那货。如何来使用它，这个屏用的ST7735S驱动芯片，SPI接口，比较常见。这里介绍Arduino下两个库驱动它。Adafruit_ST7735.h下载地址：https://github.com/adafruit/Adafruit-ST7735-Library，把所有文件下载至librariesAdafruit_ST7735文件夹即可，当然也可以通过Arduino库管理器安装。这个库使用比较简单，引用Adafruit_GFX.h、Adafruit_ST7735.h这两个库文件就可以使用了，简单的代码如下：#include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #define TFT_SCLK 2 //SCL #define TFT_MOSI 3 //SDA #define TFT_RST 10 //RES #define TFT_DC 6 //DC #define TFT_CS 7 //CS //______TFT_BL 不接 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST); void setup(void) { tft.initR(INITR_BLACKTAB); tft.fillScreen(ST7735_RED); tft.setTextColor(ST7735_YELLOW); tft.setTextSize(2); tft.setCursor(10,30); tft.print("Hello ST7735!"); } void loop(void) { }这个库虽然简单，但是功能也比较单薄，比如没有清屏的方法。TFT_eSPI.h这个库稍微麻烦一点，但是功能丰富。下载：https://github.com/Bodmer/TFT_eSPI，安装好库之后需要修改User_Setup.h配置文件。主要改下面几个地，都是按照这块屏幕设置。... //驱动选择 #define ST7735_DRIVER ... //选择宽高像素值 #define TFT_WIDTH 128 #define TFT_HEIGHT 160 ... #define ST7735_BLACKTAB ... #define TFT_INVERSION_OFF ... #define TFT_BACKLIGHT_ON HIGH ... //定义引脚 #define TFT_MOSI 3 #define TFT_SCLK 2 #define TFT_CS 7 // Chip select control pin #define TFT_DC 6 // Data Command control pin #define TFT_RST 10 // Reset pin (could connect to RST pin) ... //后面一般不用修改 ...下面是Arduino代码实例。#include <TFT_eSPI.h> TFT_eSPI tft =TFT_eSPI(); void setup(void) { tft.init(); tft.setRotation(0); tft.fillScreen(TFT_BLUE); tft.setCursor(20, 10); tft.setTextColor(TFT_WHITE); tft.setTextSize(2); tft.print("Hello ST7735!"); } void loop() { }

esp8266+DS1302+LCD1602+DHT11+无源蜂鸣器制作网络时钟升级版
type: item
date: 2022-05-24T21:04:00+08:00
description: 零零碎碎隔段时间捣鼓一下，历时几个月，终于把网络时钟制作齐了我想要的功能。外观看图。这个闹钟功能比较全面了，采用了D1 mini开发板（esp8266）、LCD1602显示屏、DS1302时钟芯片、DHT11温湿度模块、无源蜂鸣器等配件，Arduino开发，实现的功能列表如下。显示日期、星期、时间和温湿度，外带一个Wifi小图标。可以联网自动对时。断电不影响走时（DS1302）。可设置一路闹钟，通过web页面设置，响铃为两只老虎旋律。可web页面配置wifi，没有设置wifi时自动开启wifi热点，以供手机链接时钟进行配置。两个按钮，一个重启模块，一个清楚WiFi配置信息。下面是进行WiFi设置和闹钟设置的两个网页。程序代码如下：/* ---By www.yizu.org--- Connect D1 mini I2C_LCD 5V VCC GND GND D2 SDA D1 SCL D1 mini DS1302 3V3 VCC GND GND D6 CLK D7 DAT D8 RST */ #include <ESP8266WiFi.h> #include <EEPROM.h> #include <WiFiUdp.h> #include <NTPClient.h> #include <LiquidCrystal_I2C.h> #include <TimeLib.h> #include <Arduino.h> #include <DS1302.h> #include <dht11.h> #include <ESP8266WebServer.h> #include <FS.h> LiquidCrystal_I2C lcd(0x27, 16, 2); int32_t t_xd=0; //定义web服务 ESP8266WebServer server(80); //设置NTPClient #define NTP_OFFSET 60 * 60 * 8 // 时区偏移量 #define NTP_ADDRESS "ntp1.aliyun.com" // NTP服务器 WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, NTP_ADDRESS, NTP_OFFSET); //设置时钟模块 DS1302 rtc(12,13,15); //设置校对时间间隔（单位秒） #define CALIBRATION_INTERVAL 60 unsigned long t_stamp=0; unsigned long t_stamp2=0; //设置蜂鸣器 #define BUZZER_PIN 14 //设置D5脚 #define ALARM_INTERVAL 300 //一个节拍的时间/毫秒 unsigned long b_stamp = 0; unsigned long b_stamp2 = 0; unsigned long duration = 0;//闹铃持续时间 boolean isAlarm=0;//蜂鸣器发声标记 uint8_t tonesTag=0; uint8_t tonesLength=33;//长度 //两只老虎音乐 char toneNotes[] = "cdeccdecefgefggagfecgagfecdgcdgc "; //'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' float beats[] = { 1,1,1,1,1,1,1,1,1,1,2,1,1,2,0.5,0.5,0.5,0.5,1,1,0.5,0.5,0.5,0.5,1,1,1,1,2,1,1,2,4 }; bool ringing=false; //闹钟设置 bool alarm_on=false; int alarm_hour=0; int alarm_min=0; //设置AP账号密码 const char* ssid = "myAP000"; const char* password = "12345678"; //设置温湿度传感器 #define DHT11PIN 2//定义dht11引脚 dht11 myDht; int tem=0;//温度 int hum=0;//湿度 //显示字符 #if defined(ARDUINO) && ARDUINO >= 100 #define printByte(args) write(args); #else #define printByte(args) print(args,BYTE); #endif //要显示的特殊字符 //uint8_t nian[8] = {0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,…

合宙ESP32-C3通过网页配置WIFI存储在EEPROM
type: item
date: 2022-05-21T00:05:00+08:00
description: 本文在《合宙ESP32-C3开发板Arduino操作SPIFFS存储》基础上继续进行，关于合宙的这块板子介绍点这里。首先把index.html和style.css上传至EPS32-C3开发板，文件如下。index.html 设置WIFI 设置WIFI &copy 2022 yizu.org style.csshtml,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,dl,dt,dd,ol,nav ul,nav li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline;} article, aside, details, figcaption, figure,footer, header, hgroup, menu, nav, section {display: block;} ol,ul{list-style:none;margin:0px;padding:0px;} blockquote,q{quotes:none;} blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;} table{border-collapse:collapse;border-spacing:0;} a{text-decoration:none;} .txt-rt{text-align:right;} .txt-lt{text-align:left;} .txt-center{text-align:center;} .float-rt{float:right;} .float-lt{float:left;} .clear{clear:both;} .pos-relative{position:relative;} .pos-absolute{position:absolute;} .vertical-base{ vertical-align:baseline;} .vertical-top{ vertical-align:top;} nav.vertical ul li{ display:block;} nav.horizontal ul li{ display: inline-block;} body{ font-family: 'Cabin', sans-serif !important; background:#d5d5d5 0px 0px; } .main{ width: 35%; margin: 8em auto 0; padding: 0em 4em 5em; } .main h1{ color: #7e8fad; text-align: center; font-size: 2.5em; margin: 0 0 1.5em; } .main input[type="text"],.main input[type="password"]{ outline: none; border: 1px solid rgb(254, 2, 2); background: #ffffff; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; -o-border-radius: 5px; -ms-border-radius: 5px; padding: 15px 10px; width: 96%; font-size: 1.3em; color: #7e8fad; text-align: center; font-family: 'Syncopate', sans-serif; } .main input[type="password"]{ margin:1.…