【N32G457 】基于W5500的Webserver数据展示

在这里插入图片描述本文是RT-Thread用户@yukelab 原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3448.html

本来要做的的基于 SDI-12 的传感数据记录器,拿到板子后,发现并不合适;恰好手头有个 W5500 模块,就做了个用于展示传感器数据的 webserver;

基于W5500和Mongoose开发的webserver;硬件部分由W5500模块,N32G457主控板等组成;软件部分主要移植了Mongoose 7.4, 适配了 RT-Thread SPI驱动,填了一点 W5500 软件包的一点坑。

硬件接线

W5500 模块硬件

SPI1
CS_PIN -> PA3
RST_PIN -> PC4
IRQ_PIN -> PA0

ADC 温度

VRFE_N -> GND

VREF_P -> 3V3

软件实现

该项目软件架构主要使用2个线程完成,其中:
MG线程:Mongoose http server 主线程;
INFO线程:负责获取芯片温度,由于手头没有其他类型的传感器,就在该线程中产生了一些用于展示的随机数;

由于没有存储器件,js 部分的代码存在 ROMFS 中,js部分使用 d3.js 进行动态图表的绘制和更新,使用 axios 进行http的请求;

作品完整图片

演示效果

代码地址

https://gitee.com/yukelab7/n32g457_mongoose

其他

基本开发环境配置

使用RT-Thread 的最初的 env 环境进行代码的编译;

编译环境

scons

使用pyocd进行烧录

pyocd 烧录环境配置

文档中对目标芯片的支持中(Target support)讲了可以通过三种方式进行目标芯片的支持;

  1. Built-in
  2. CMSIS-Packs
  3. Manual pack usage

我这里通过CMSIS-Packs 的方式,使用国民科技提供了 N32G45x 的 Nationstech.N32G45x_DFP.1.0.4.pack包,但是注意要对这个包的压缩文件路径进行适当修改,注意左边是正确的配置;

【N32G457 】基于W5500的Webserver数据展示_第1张图片

使用默认的配置文件, 文件名必须为 pyocd.yamlpyocd.yml , 然后通过 pyoncd flash ./rtthread.bin 下载固件;

pyocd.yaml 文件内容

probes:
  0001A0000002: # Probe's unique ID.
    target_override:  n32g457vel7
    test_binary:      ./rtthread.bin
pack:
  - ./pyocd_flash/Nationstech.N32G45x_DFP.1.0.4.pack

pyocd.png

软件开发过程中的三个坑

spi 部分

问题描述

自己仿硬件库,整了个 spi 驱动,进行 spi_transmitreceive 时遇到,在填充数据之前发现 SPI_I2S_RNE_FLAG 置位,导致回读的数据数据错位及缺失;

解决方案

在进行数据数据读写过程中,确保 SPI_I2S_RNE_FLAG 处于非置位状态,通过一次 dummy 读操作;

W5500 部分

问题描述

wiznet 包没有对wiznet 包 wiz_setsockopt 函数没有对 SO_REUSEADDR, SO_KEEPALIVE 选项进行处理,导致 mongoose 启动失败;

解决方案

增加这两个选项参数;

mongoose部分

问题描述

mongoose 在 qemu 上运行正常; 由于 n32g457 板上没有存储器件,将服务器相关文件以 ROMFS 的方式存入flash中,然后使用 mongoose 默认的文件接口,读写 index.html失败;

解决方案

查看发现mg_file 的本质是用标准库实现的,可能 RTT 中标准库对 ROMFS 的读不支持,基于 DFS 的 poxis 接口,做了文件接口;

存在问题

  1. 该项目在 firefox 浏览器测试工作正常,使用Google Chrome, MicroSoft Edge 测试无法显示图表;Google 系浏览器连接服务器时,会一次发起多个连接,导致 W5500 端口耗尽,无法加载 index.html,导致宕机,需要进行重启。而 firefox 浏览器 只会创建 2 个连接;下图为google 系浏览器与服务器连接时建立的连接;

【N32G457 】基于W5500的Webserver数据展示_第2张图片

你可能感兴趣的:(RT-Thread,单片机,嵌入式硬件,物联网,操作系统,rtthread)