RISC-V单片机快速入门07-板载LCD显示ESP8266数据
发布日期:2021-05-15 00:02:30 浏览次数:25 分类:精选文章

本文共 3638 字,大约阅读时间需要 12 分钟。

前言

本节使用GD32VF103控制ESP-01S启动TCP服务器,通过多个网络调试助手连接ESP-01S进行通信,并将TCP网络助手发送的数据显示在LCD上。

一、基础知识

1. LCD简介

本实验使用的LCD为龙眼开发板板载LCD,采用ST7735S驱动芯片,屏幕尺寸为0.96英寸。硬件引脚说明如下:

![省略图片描述]

本实验最终实现效果如下:

![省略图片描述]

为了设置中文显示,需使用字库软件。本实验采用字模Ⅲ字库软件,字库文件已连同代码推送至云端,可直接下载使用。

2. 字库软件安装

字模Ⅲ安装步骤如下:

  • 双击Zimo3InstallFULL.exe,依次完成默认安装。
  • 打开fontreg.exe工具,按照提示注册字库。
  • 注册成功后可看到以下界面:

    ![省略图片描述]

    3. 制作字符

    在字模Ⅲ软件中:

  • 设置字体大小和字符集格式。
  • 输入待转换字符串,点击“字库智能生成”按钮。
  • 将生成的字库文件复制至工程中的oledfont.h文件。
  • 导出“接收”汉字,设置大小为16×16(示例)。
  • 4. 驱动程序说明

    gd32vf103单片机通过SPI接口驱动LCD,硬件连接如下:

    ![省略图片描述]

    5. SPI初始化代码

    void spi_config(void) {    spi_parameter_struct spi_init_struct;    OLED_CS_Set();    spi_struct_para_init(&spi_init_struct); // SPI0参数配置    spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;    spi_init_struct.device_mode = SPI_MASTER;    spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT;    spi_init_struct.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE;    spi_init_struct.nss = SPI_NSS_SOFT;    spi_init_struct.prescale = SPI_PSC_8;    spi_init_struct.endian = SPI_ENDIAN_MSB;    spi_init(SPI0, &spi_init_struct);    spi_crc_polynomial_set(SPI0, 7);    spi_enable(SPI0);}

    6. LCD写数据函数

    void LCD_Writ_Bus(u8 dat) {    OLED_CS_Clr();    while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE)) {        spi_i2s_data_transmit(SPI0, dat);    }    while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE)) {        spi_i2s_data_receive(SPI0);    }    OLED_CS_Set();}

    7. 主函数逻辑

    while (1) {    if (STA_DATA_ARRIVED == system_context->event) {        // 处理HTTP数据        if (rt_strstr(system_context->data_buf, "/getdata")) {            rt_kprintf("ready to send data………. %s\r\n", response);            ESP8266_SendString(DISABLE, response, rt_strlen(response), system_context->sock_id);            system_context->event = STA_CONNECTED;        } else if (rt_strstr(system_context->data_buf, "/index")) {            rt_kprintf("ready to send data………. %s\r\n", response_index);            ESP8266_SendString(DISABLE, response_index, rt_strlen(response_index), system_context->sock_id);            system_context->event = STA_CONNECTED;        } else {            ESP8266_SendString(DISABLE, system_context->data_buf, rt_strlen(system_context->data_buf), system_context->sock_id);            LCD_ShowString(24 + 48, 40, (u8 *)(system_context->data_buf), RED);        }        rt_thread_mdelay(10);    }}

    二、实例

    2.1 制作字符

    在字模Ⅲ软件中:

  • 设置字体大小和字符集格式。
  • 输入待转换字符串,点击“字库智能生成”按钮。
  • 将生成的字库文件复制至工程中的oledfont.h文件。
  • 导出“接收”汉字,设置大小为16×16(示例)。
  • 2.2 驱动程序说明

    gd32vf103单片机通过SPI接口驱动LCD,硬件连接如下:

    ![省略图片描述]

    2.3 程序主函数逻辑

    while (1) {    if (STA_DATA_ARRIVED == system_context->event) {        // 处理HTTP数据        if (rt_strstr(system_context->data_buf, "/getdata")) {            rt_kprintf("ready to send data………. %s\r\n", response);            ESP8266_SendString(DISABLE, response, rt_strlen(response), system_context->sock_id);            system_context->event = STA_CONNECTED;        } else if (rt_strstr(system_context->data_buf, "/index")) {            rt_kprintf("ready to send data………. %s\r\n", response_index);            ESP8266_SendString(DISABLE, response_index, rt_strlen(response_index), system_context->sock_id);            system_context->event = STA_CONNECTED;        } else {            ESP8266_SendString(DISABLE, system_context->data_buf, rt_strlen(system_context->data_buf), system_context->sock_id);            LCD_ShowString(24 + 48, 40, (u8 *)(system_context->data_buf), RED);        }        rt_thread_mdelay(10);    }}

    三、运行

    下载程序后,重启设备,ESP-01S启动一个WIFI热点并启动TCP服务器。连接模块热点的电脑,启动网路助手,连接模块AP热点,发送“111”数据包,会接收返回的“111”数据。LCD显示效果如下:

    ![省略图片描述]

    灯光效果可能不佳,但功能实现正常。

    四、结语

    如有疑问,可加入QQ群906015840(备注:物联网项目交流)。

    关注下方公众号,回复“risc-v”即可获取更多资料:

    ![省略图片描述]

    一叶孤沙出品:一沙一世界,一叶一菩提

    上一篇:PyQt5快速上手基础篇7-弹出dialog
    下一篇:WIFI模块开发教程之W600网络篇6:Airkiss配网

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年05月09日 12时17分34秒