From 9bdee63b31ba2a03fc94bb5de37e7720926f940b Mon Sep 17 00:00:00 2001 From: helei Date: Sat, 15 Aug 2026 01:00:17 +0800 Subject: [PATCH] =?UTF-8?q?V1.5:=20=E6=96=B0=E5=A2=9E128x64=20OLED+GB2312?= =?UTF-8?q?=E5=AD=97=E5=BA=93IC=E6=98=BE=E7=A4=BA(GPIO=E6=A8=A1=E6=8B=9FSP?= =?UTF-8?q?I,1s=E5=88=B7=E7=94=B5=E5=8E=8B/=E7=94=B5=E6=B5=81/=E5=8A=9F?= =?UTF-8?q?=E7=8E=87/=E7=94=B5=E8=83=BD/=E7=BB=A7=E7=94=B5=E5=99=A8/?= =?UTF-8?q?=E7=BD=91=E7=BB=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- V1.5/STM32F103_App1/HardWare/OLED/oled.c | 289 ++++++++++++++++++ V1.5/STM32F103_App1/HardWare/OLED/oled.h | 18 ++ .../HardWare/SYSINIT/app_loop.c | 35 +++ .../MDK-ARM/STM32F103rb_App1.uvprojx | 7 +- V1.5/STM32F103_App1/README.md | 8 + V1.5/鐗堟湰璇存槑.md | 2 + 6 files changed, 358 insertions(+), 1 deletion(-) create mode 100644 V1.5/STM32F103_App1/HardWare/OLED/oled.c create mode 100644 V1.5/STM32F103_App1/HardWare/OLED/oled.h diff --git a/V1.5/STM32F103_App1/HardWare/OLED/oled.c b/V1.5/STM32F103_App1/HardWare/OLED/oled.c new file mode 100644 index 0000000..77854a7 --- /dev/null +++ b/V1.5/STM32F103_App1/HardWare/OLED/oled.c @@ -0,0 +1,289 @@ +/* oled.c - 128x64 OLED + 晶联讯 GB2312 字库 IC 驱动(GPIO 模拟 SPI) + * 移植自《485模拟磅秤数据带CRC》工程 oledisp.c,引脚改为本板: + * CLK=PC12 MOSI=PC9 DC=PC8 CS1=PC7 FSO=PC6 CS2=PB15 */ + +#include "oled.h" +#include + +#define OLED_CLK_PORT GPIOC +#define OLED_CLK_PIN GPIO_PIN_12 +#define OLED_MOSI_PORT GPIOC +#define OLED_MOSI_PIN GPIO_PIN_9 +#define OLED_DC_PORT GPIOC +#define OLED_DC_PIN GPIO_PIN_8 +#define OLED_CS1_PORT GPIOC +#define OLED_CS1_PIN GPIO_PIN_7 +#define OLED_FSO_PORT GPIOC +#define OLED_FSO_PIN GPIO_PIN_6 +#define OLED_CS2_PORT GPIOB +#define OLED_CS2_PIN GPIO_PIN_15 + +#define lcd_cs1(a) HAL_GPIO_WritePin(OLED_CS1_PORT, OLED_CS1_PIN, (GPIO_PinState)(a)) +#define lcd_dc(a) HAL_GPIO_WritePin(OLED_DC_PORT, OLED_DC_PIN, (GPIO_PinState)(a)) +#define lcd_mosi(a) HAL_GPIO_WritePin(OLED_MOSI_PORT, OLED_MOSI_PIN, (GPIO_PinState)(a)) +#define lcd_clk(a) HAL_GPIO_WritePin(OLED_CLK_PORT, OLED_CLK_PIN, (GPIO_PinState)(a)) +#define rom_cs2(a) HAL_GPIO_WritePin(OLED_CS2_PORT, OLED_CS2_PIN, (GPIO_PinState)(a)) +#define ROM_OUT HAL_GPIO_ReadPin(OLED_FSO_PORT, OLED_FSO_PIN) + +static uint8_t s_row = 0; /* 当前页地址(16px 行 × 2) */ +static uint8_t s_col = 0; /* 当前列(像素) */ + +/*==== FSO 脚输入/输出切换(读字库时为输入)====*/ +static void fso_input(void) +{ + GPIO_InitTypeDef g = {0}; + g.Pin = OLED_FSO_PIN; + g.Mode = GPIO_MODE_INPUT; + g.Pull = GPIO_NOPULL; + HAL_GPIO_Init(OLED_FSO_PORT, &g); +} + +static void fso_output(void) +{ + GPIO_InitTypeDef g = {0}; + g.Pin = OLED_FSO_PIN; + g.Mode = GPIO_MODE_OUTPUT_PP; + g.Pull = GPIO_PULLUP; + g.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(OLED_FSO_PORT, &g); +} + +/*==== GPIO 初始化 ====*/ +static void oled_gpio_init(void) +{ + GPIO_InitTypeDef g = {0}; + + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + + /* 先置好空闲电平再开推挽,避免毛刺 */ + HAL_GPIO_WritePin(OLED_CLK_PORT, OLED_CLK_PIN, GPIO_PIN_SET); + HAL_GPIO_WritePin(OLED_MOSI_PORT, OLED_MOSI_PIN, GPIO_PIN_SET); + HAL_GPIO_WritePin(OLED_DC_PORT, OLED_DC_PIN, GPIO_PIN_SET); + HAL_GPIO_WritePin(OLED_CS1_PORT, OLED_CS1_PIN, GPIO_PIN_SET); + HAL_GPIO_WritePin(OLED_CS2_PORT, OLED_CS2_PIN, GPIO_PIN_SET); + + g.Mode = GPIO_MODE_OUTPUT_PP; + g.Pull = GPIO_PULLUP; + g.Speed = GPIO_SPEED_FREQ_LOW; + + g.Pin = OLED_CLK_PIN; HAL_GPIO_Init(OLED_CLK_PORT, &g); + g.Pin = OLED_MOSI_PIN; HAL_GPIO_Init(OLED_MOSI_PORT, &g); + g.Pin = OLED_DC_PIN; HAL_GPIO_Init(OLED_DC_PORT, &g); + g.Pin = OLED_CS1_PIN; HAL_GPIO_Init(OLED_CS1_PORT, &g); + g.Pin = OLED_CS2_PIN; HAL_GPIO_Init(OLED_CS2_PORT, &g); + + fso_output(); +} + +/*==== 写字节到屏幕(DC=0 指令 / DC=1 数据)====*/ +static void oled_write(uint8_t dc, uint8_t dat) +{ + lcd_dc(dc); + lcd_cs1(0); + for (int i = 0; i < 8; i++) { + lcd_clk(0); + lcd_mosi(dat & 0x80); + lcd_clk(1); + dat <<= 1; + } + lcd_dc(1); + lcd_cs1(1); +} + +/*==== 设置页/列地址 ====*/ +static void lcd_address(uint8_t page, uint8_t column) +{ + oled_write(0, 0xb0 + column); /* 页地址 */ + oled_write(0, ((page & 0xf0) >> 4) | 0x10); /* 列地址高 4 位 */ + oled_write(0, (page & 0x0f)); /* 列地址低 4 位 */ +} + +/*==== 全屏清屏 ====*/ +void oled_clear(void) +{ + lcd_cs1(0); + rom_cs2(1); + for (uint8_t i = 0; i < 8; i++) { + oled_write(0, 0xb0 + i); + oled_write(0, 0x00); + oled_write(0, 0x10); + for (uint8_t j = 0; j < 128; j++) oled_write(1, 0x00); + } + lcd_cs1(1); +} + +/*==== 屏幕初始化(SSD1306 兼容序列)====*/ +void oled_init(void) +{ + HAL_Delay(400); /* 等屏幕/字库上电稳定 */ + oled_gpio_init(); + lcd_cs1(0); + rom_cs2(1); + oled_write(0, 0xAE); /* display off */ + oled_write(0, 0x20); /* 寻址模式 */ + oled_write(0, 0x10); /* 水平寻址 */ + oled_write(0, 0xb0); + oled_write(0, 0xc8); /* COM 扫描方向 */ + oled_write(0, 0x00); + oled_write(0, 0x10); + oled_write(0, 0x40); /* 起始行 */ + oled_write(0, 0x81); /* 对比度 */ + oled_write(0, 0xFF); + oled_write(0, 0xa1); /* 段重映射 */ + oled_write(0, 0xa6); /* 正常显示 */ + oled_write(0, 0xa8); /* 复用率 */ + oled_write(0, 0x3F); + oled_write(0, 0xa4); + oled_write(0, 0xd3); /* 显示偏移 */ + oled_write(0, 0x00); + oled_write(0, 0xd5); /* 时钟分频 */ + oled_write(0, 0xf0); + oled_write(0, 0xd9); /* 预充电 */ + oled_write(0, 0x22); + oled_write(0, 0xda); /* COM 硬件配置 */ + oled_write(0, 0x12); + oled_write(0, 0xdb); /* VCOMH */ + oled_write(0, 0x20); + oled_write(0, 0x8d); /* DC-DC */ + oled_write(0, 0x14); + oled_write(0, 0xaf); /* display on */ + lcd_cs1(1); + oled_clear(); +} + +/*==== 显示 16x16 点阵(汉字)====*/ +static void display_graphic_16x16(uint8_t page, uint8_t column, const uint8_t *dp) +{ + lcd_cs1(0); + rom_cs2(1); + for (uint8_t j = 2; j > 0; j--) { + lcd_address(column, page); + for (uint8_t i = 0; i < 16; i++) oled_write(1, *dp++); + page++; + } + lcd_cs1(1); +} + +/*==== 显示 8x16 点阵(ASCII)====*/ +static void display_graphic_8x16(uint8_t page, uint8_t column, const uint8_t *dp) +{ + lcd_cs1(0); + for (uint8_t j = 2; j > 0; j--) { + lcd_address(column, page); + for (uint8_t i = 0; i < 8; i++) oled_write(1, *dp++); + page++; + } + lcd_cs1(1); +} + +/*==== 字库 IC 写字节(指令/地址)====*/ +static void rom_write_byte(uint8_t dat) +{ + for (int i = 0; i < 8; i++) { + lcd_mosi(dat & 0x80); + dat <<= 1; + lcd_clk(0); + lcd_clk(1); + } +} + +/*==== 字库 IC 读一字节 ====*/ +static uint8_t rom_read_byte(void) +{ + uint8_t ret = 0; + lcd_clk(1); + fso_input(); + for (int i = 0; i < 8; i++) { + lcd_clk(0); + ret <<= 1; + if (ROM_OUT) ret |= 1; + lcd_clk(1); + } + fso_output(); + return ret; +} + +/*==== 从字库 IC 连续读 DataLen 字节 ====*/ +static void rom_read_n(uint8_t ah, uint8_t am, uint8_t al, uint8_t *buf, uint8_t len) +{ + rom_cs2(0); + lcd_cs1(1); + lcd_clk(0); + rom_write_byte(0x03); /* 读指令 */ + rom_write_byte(ah); + rom_write_byte(am); + rom_write_byte(al); + for (uint8_t i = 0; i < len; i++) buf[i] = rom_read_byte(); + rom_cs2(1); +} + +/*==== 定位:row 0~3(16px 行),col8 为 8 像素单位 ====*/ +void oled_locate(uint8_t row, uint8_t col8) +{ + s_row = row * 2; + s_col = col8 * 8; +} + +/*==== 显示 GBK 字符串(16x16 汉字 / 8x16 ASCII,编码换算见晶联讯字库手册)====*/ +void oled_print(const char *s) +{ + uint8_t fontbuf[32]; + uint8_t y = s_row; + uint8_t x = s_col; + const uint8_t *text = (const uint8_t *)s; + uint32_t fontaddr; + + s_col += strlen(s) * 8; /* 位置自加(按 8px/字符计) */ + + uint8_t i = 0; + while (text[i] > 0x00) { + if ((text[i] >= 0xb0 && text[i] <= 0xf7) && text[i+1] >= 0xa1) { + /* GB2312 汉字:Address = ((MSB-0xB0)*94 + (LSB-0xA1) + 846) * 32 */ + fontaddr = (text[i] - 0xb0) * 94; + fontaddr += (text[i+1] - 0xa1) + 846; + fontaddr *= 32; + rom_read_n((uint8_t)(fontaddr >> 16), (uint8_t)(fontaddr >> 8), + (uint8_t)fontaddr, fontbuf, 32); + display_graphic_16x16(y, x, fontbuf); + i += 2; + x += 16; + } + else if ((text[i] >= 0xa1 && text[i] <= 0xa3) && text[i+1] >= 0xa1) { + /* GB2312 全角符号:Address = ((MSB-0xA1)*94 + (LSB-0xA1)) * 32 */ + fontaddr = (text[i] - 0xa1) * 94; + fontaddr += (text[i+1] - 0xa1); + fontaddr *= 32; + rom_read_n((uint8_t)(fontaddr >> 16), (uint8_t)(fontaddr >> 8), + (uint8_t)fontaddr, fontbuf, 32); + display_graphic_16x16(y, x, fontbuf); + i += 2; + x += 16; + } + else if (text[i] >= 0x20 && text[i] <= 0x7e) { + /* ASCII 8x16:Address = (char-0x20)*16 + 0x3CF80 */ + fontaddr = (text[i] - 0x20) * 16 + 0x3cf80; + rom_read_n((uint8_t)(fontaddr >> 16), (uint8_t)(fontaddr >> 8), + (uint8_t)fontaddr, fontbuf, 16); + display_graphic_8x16(y, x, fontbuf); + i += 1; + x += 8; + } + else { + i++; + } + } +} + +/*==== 整行显示:计算像素宽度,不足 128px 用空格补齐(覆盖上次内容)====*/ +void oled_print_line(const char *s) +{ + const uint8_t *p = (const uint8_t *)s; + uint32_t w = 0; + while (*p) { + if (p[0] >= 0xa1 && p[1] >= 0xa1) { w += 16; p += 2; } /* 汉字/全角 */ + else { w += 8; p += 1; } /* ASCII */ + } + oled_print(s); + while (w < 128) { oled_print(" "); w += 8; } +} diff --git a/V1.5/STM32F103_App1/HardWare/OLED/oled.h b/V1.5/STM32F103_App1/HardWare/OLED/oled.h new file mode 100644 index 0000000..9687b71 --- /dev/null +++ b/V1.5/STM32F103_App1/HardWare/OLED/oled.h @@ -0,0 +1,18 @@ +#ifndef __OLED_H +#define __OLED_H + +#include "main.h" + +/* 128x64 OLED(SSD1306 兼容指令)+ 晶联讯 GB2312 字库 IC,全部 GPIO 模拟 SPI。 + * 接线:CLK=PC12 MOSI=PC9 DC=PC8 CS1=PC7(屏幕片选) FSO=PC6(字库输出,接MCU输入) + * CS2=PB15(字库片选) + * 显示字符串必须是 GB2312/GBK 编码(本工程源文件即 GBK,直接写中文字面量即可)。 + * 屏幕 128x64:16 像素高的行共 4 行(row 0~3),每行 8 个汉字或 16 个 ASCII。 */ + +void oled_init(void); /* GPIO + 屏幕初始化(app_init 调用) */ +void oled_clear(void); /* 全屏清屏 */ +void oled_locate(uint8_t row, uint8_t col8); /* 定位:row 0~3,col8 为 8 像素单位 0~15 */ +void oled_print(const char *gbk_str); /* 从当前位置显示 GBK 字符串 */ +void oled_print_line(const char *gbk_str); /* 整行显示:不足 128px 用空格补齐覆盖旧内容 */ + +#endif /* __OLED_H */ diff --git a/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c b/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c index 53cf0d3..2a6da46 100644 --- a/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c +++ b/V1.5/STM32F103_App1/HardWare/SYSINIT/app_loop.c @@ -27,6 +27,7 @@ #include "log_cn.h" #include "ble_at.h" #include "hlw8032.h" +#include "oled.h" #include "reset_log.h" #include "../W25Q64/w25q64.h" @@ -95,6 +96,12 @@ void app_init(void) /* HLW8032 电能计量(UART5 PD2,只累计电量) */ hlw8032_init(); + /* OLED 屏幕(128x64 + GB2312 字库 IC) */ + oled_init(); + oled_locate(1, 2); oled_print("智能控制器"); + oled_locate(2, 2); oled_print("V" FIRMWARE_VERSION_STR); + log_info("> OLED: 初始化完成"); + /* 网络模块初始化:按 EEPROM 记忆的上次成功方式优先(4G 或 WiFi) */ NET_init(); @@ -191,6 +198,33 @@ static void app_task(void *arg) } } +/*==== OLED 基础信息:电压/电流/功率/电能/继电器/网络,1s 刷新 ====*/ +static void oled_home_refresh(void) +{ + char buf[24]; + + if (hlw8032_online()) { + snprintf(buf, sizeof(buf), "%.1fV %.2fA", + (double)hlw8032_get_voltage_v(), (double)hlw8032_get_current_a()); + oled_locate(0, 0); oled_print_line(buf); + snprintf(buf, sizeof(buf), "%.1fW %.2fkWh", + (double)hlw8032_get_power_w(), (double)hlw8032_get_energy_kwh()); + oled_locate(1, 0); oled_print_line(buf); + } else { + oled_locate(0, 0); oled_print_line("计量芯片离线"); + oled_locate(1, 0); oled_print_line(""); + } + + snprintf(buf, sizeof(buf), "开关:%d%d%d%d", + (int)MqttInfoStr.Relay_State[1], (int)MqttInfoStr.Relay_State[2], + (int)MqttInfoStr.Relay_State[3], (int)MqttInfoStr.Relay_State[4]); + oled_locate(2, 0); oled_print_line(buf); + + const char *net = !g_net_mqtt_ready ? "未联网" : + (NET_GetActiveBackend() == NET_BACKEND_WIFI) ? "WiFi 已连接" : "4G 已连接"; + oled_locate(3, 0); oled_print_line(net); +} + /* 电能日志/上报间隔:想改频率就改这个宏(单位 ms) */ #define ENERGY_REPORT_INTERVAL_MS 10000u @@ -219,6 +253,7 @@ static void sys_task(void *arg) batt_tick = HAL_GetTick(); update_batter(); hlw8032_tick(); /* 攒够约 0.1kWh 写一次 EEPROM */ + oled_home_refresh(); /* OLED 基础信息 1s 刷新 */ reset_log_tick((uint32_t)(up_ms / 1000)); /* 共享 RAM 更新运行秒数,热复位不丢 */ } diff --git a/V1.5/STM32F103_App1/MDK-ARM/STM32F103rb_App1.uvprojx b/V1.5/STM32F103_App1/MDK-ARM/STM32F103rb_App1.uvprojx index 0132ec9..7ec19fd 100644 --- a/V1.5/STM32F103_App1/MDK-ARM/STM32F103rb_App1.uvprojx +++ b/V1.5/STM32F103_App1/MDK-ARM/STM32F103rb_App1.uvprojx @@ -369,7 +369,7 @@ --no_multibyte_chars USE_HAL_DRIVER,STM32F103xE - ../Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;..\m_app;..\HardWare\CAR;..\HardWare\RELAY;..\HardWare\LOG;..\HardWare\IIC;..\HardWare\24C02;..\HardWare\ADC;..\HardWare\LED;..\HardWare\SYSINIT;..\HardWare\UART;..\HardWare\W25Q64;..\HardWare\NETWORK;..\HardWare\WIFI;..\HardWare\MQTT;..\HardWare\FEED_SCALE;..\HardWare\USER_CMD;..\HardWare\HLW8032;..\Middlewares\FreeRTOS\Source\include;..\Middlewares\FreeRTOS\Source\portable\RVDS\ARM_CM3 + ../Inc;../Drivers/STM32F1xx_HAL_Driver/Inc;../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy;../Drivers/CMSIS/Device/ST/STM32F1xx/Include;../Drivers/CMSIS/Include;..\m_app;..\HardWare\CAR;..\HardWare\RELAY;..\HardWare\LOG;..\HardWare\IIC;..\HardWare\24C02;..\HardWare\ADC;..\HardWare\LED;..\HardWare\SYSINIT;..\HardWare\UART;..\HardWare\W25Q64;..\HardWare\NETWORK;..\HardWare\WIFI;..\HardWare\MQTT;..\HardWare\FEED_SCALE;..\HardWare\USER_CMD;..\HardWare\HLW8032;..\HardWare\OLED;..\Middlewares\FreeRTOS\Source\include;..\Middlewares\FreeRTOS\Source\portable\RVDS\ARM_CM3 @@ -692,6 +692,11 @@ 1 ..\HardWare\HLW8032\hlw8032.c + + oled.c + 1 + ..\HardWare\OLED\oled.c + diff --git a/V1.5/STM32F103_App1/README.md b/V1.5/STM32F103_App1/README.md index 897b1ed..752b95f 100644 --- a/V1.5/STM32F103_App1/README.md +++ b/V1.5/STM32F103_App1/README.md @@ -62,6 +62,7 @@ | ESP_EN | WiFi 妯″潡浣胯兘 | PA6 | 鎺ㄦ尳杈撳嚭锛岄珮鐢靛钩=浣胯兘锛堜笂鐢靛嵆缃珮锛 | | BT_MODE | 钃濈墮 AT/閫忎紶鍒囨崲 | PB0 | 寮婕忚緭鍑猴紝鎷変綆 1s 杩 AT 妯″紡锛坆le_at.c 鎺у埗锛 | | BT_RST | 钃濈墮妯″潡澶嶄綅 | PA7 | 鎺ㄦ尳杈撳嚭锛屼綆鐢靛钩=宸ヤ綔锛堥粯璁わ級锛岄珮鐢靛钩=澶嶄綅 | +| OLED 灞忓箷 | 128x64 + GB2312 瀛楀簱 IC | CLK=PC12 MOSI=PC9 DC=PC8 CS1=PC7 FSO=PC6 CS2=PB15 | GPIO 妯℃嫙 SPI锛屾樉绀虹數鍘/鐢垫祦/鍔熺巼/鐢佃兘/缁х數鍣/缃戠粶 | | Relay1 | 鎶曞杺鐢垫満鎺у埗 | PB7 | 楂樼數骞冲惛鍚 | | Relay2~4 | 澶囩敤鎺у埗 | PB8/PC0/PC2 | 楂樼數骞冲惛鍚 | | I2C锛堣蒋浠讹級 | AT24C02 閰嶇疆瀛樺偍 | PA11/PA12 | 椤靛啓鍏 | @@ -117,6 +118,13 @@ - **涓婃姤**锛歁QTT 灏辩华涓旇姱鐗囧湪绾匡紙1s 鍐呮湁鏈夋晥甯э級鏃讹紝姣忓垎閽熼殢杩愯蹇冭烦涓婃姤涓娆 `{"energy":%.2f}`锛涙湭鑱旂綉/鑺墖涓嶅湪绾夸笉涓婃姤 - **璋冭瘯鏃ュ織**锛氳姱鐗囧湪绾挎椂姣忓垎閽熸棩蹇楀悓鏃舵墦鍗扮數鍘/鐢垫祦/鍔熺巼锛坄杩愯鏃堕棿: ... 鐢佃兘: x.xxkWh 鐢靛帇: xxx.xV 鐢垫祦: x.xxA 鍔熺巼: xxxx.xW`锛 +## OLED 灞忓箷鏄剧ず锛128x64 + GB2312 瀛楀簱 IC锛 + +- 绉绘鑷485妯℃嫙纾呯Г鏁版嵁甯RC銆嬬殑 oledisp 椹卞姩锛孏PIO 妯℃嫙 SPI锛堝睆骞 CS1 + 瀛楀簱 CS2 涓よ矾鐗囬夛紝瀛楀簱鏁版嵁浠 FSO 鑴氳鍥烇級 +- 瀛楃涓茬洿鎺ュ啓涓枃锛堝伐绋嬫簮鏂囦欢鍗 GBK 缂栫爜锛屽瓧搴 IC 鎸 GB2312 鍦板潃鎹㈢畻鍙栧瓧妯★級 +- 鏄剧ず鍐呭锛坄oled_home_refresh()`锛宻ys_task 姣 1s 鍒锋柊锛夛細绗 0 琛 鐢靛帇/鐢垫祦锛岀 1 琛 鍔熺巼/鐢佃兘锛堣閲忚姱鐗囩绾挎椂鏄剧ず"璁¢噺鑺墖绂荤嚎"锛夛紝绗 2 琛 鍥涜矾缁х數鍣ㄧ姸鎬侊紙`寮鍏:1010`锛夛紝绗 3 琛 缃戠粶鐘舵侊紙WiFi 宸茶繛鎺/4G 宸茶繛鎺/鏈仈缃戯級 +- 寮鏈烘樉绀"鏅鸿兘鎺у埗鍣 + 鐗堟湰鍙"娆㈣繋椤碉紝棣栨鍒锋柊鍚庤繘鍏ュ父鎬佺晫闈 + ## 鍙岄氶亾缃戠粶锛4G 浼樺厛锛學iFi 鍏滃簳锛 缃戠粶灞 `HardWare/NETWORK/network.c` 瀵逛笟鍔″眰灞忚斀搴曞眰妯$粍宸紓锛屼笟鍔″彧璋 `NET_*` 鎺ュ彛锛4G 鍚庣锛坄CAR/air780e.c`锛屾ā缁勫唴缃 MQTT锛変笌 WiFi 鍚庣锛坄NETWORK/net_wifi.c`锛孴CP 閫忎紶 + 杞欢 MQTT锛夊悓鏋勶紝杩愯鏃朵簰鏂ュ垏鎹€ diff --git a/V1.5/鐗堟湰璇存槑.md b/V1.5/鐗堟湰璇存槑.md index 8d85454..624c441 100644 --- a/V1.5/鐗堟湰璇存槑.md +++ b/V1.5/鐗堟湰璇存槑.md @@ -116,3 +116,5 @@ - `ESP_EN`(PA6)锛歐iFi 妯″潡浣胯兘锛屾帹鎸借緭鍑猴紝涓婄數缃珮=妯″潡宸ヤ綔 - `BT_RST`(PA7)锛氳摑鐗欏浣嶈剼锛屾帹鎸借緭鍑猴紝榛樿鎷変綆=姝e父宸ヤ綔锛堥珮=澶嶄綅锛岄鐣欙級 - `BT_MODE`(PB0)锛氳摑鐗 AT/閫忎紶鍒囨崲锛屾鍓嶇増鏈凡瀹炵幇锛坆le_at.c 寮婕忔帶鍒讹級 +- 鏂板 OLED 灞忓箷锛128x64 + 鏅惰仈璁 GB2312 瀛楀簱 IC锛宍HardWare/OLED/oled.c`锛孏PIO 妯℃嫙 SPI锛夛細 + CLK=PC12 MOSI=PC9 DC=PC8 CS1=PC7 FSO=PC6 CS2=PB15锛1s 鍒锋柊鐢靛帇/鐢垫祦/鍔熺巼/鐢佃兘/缁х數鍣/缃戠粶鐘舵