N32G457 基于W5500的Webserver数据展示
Posted RT-Thread物联网操作系统
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)讲了可以通过三种方式进行目标芯片的支持;
- Built-in
- CMSIS-Packs
- Manual pack usage
我这里通过CMSIS-Packs 的方式,使用国民科技提供了 N32G45x 的 Nationstech.N32G45x_DFP.1.0.4.pack
包,但是注意要对这个包的压缩文件路径进行适当修改,注意左边是正确的配置;
使用默认的配置文件, 文件名必须为 pyocd.yaml
或 pyocd.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
软件开发过程中的三个坑
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 接口,做了文件接口;
存在问题
- 该项目在 firefox 浏览器测试工作正常,使用Google Chrome, MicroSoft Edge 测试无法显示图表;Google 系浏览器连接服务器时,会一次发起多个连接,导致 W5500 端口耗尽,无法加载 index.html,导致宕机,需要进行重启。而 firefox 浏览器 只会创建 2 个连接;下图为google 系浏览器与服务器连接时建立的连接;
以上是关于N32G457 基于W5500的Webserver数据展示的主要内容,如果未能解决你的问题,请参考以下文章
N32G457基于RT-Thread和N32G457的高阶魔方
N32G457基于RT-Thread和N32G457的墨水屏日历
N32G457基于RT-Thread和N32G457的涂鸦云远程监控
N32G457 基于RT-Thread和N32G457的智能工业网关