当前位置: 首页 > news >正文

基于FPGA的ESP8266无线数据传输(温湿度DTH11、光照强度BH1750、WIFI模块)连接中国移动onenet云平台,仿真+上板通过+可视化平台搭建

文章目录

  • 一、创建云平台产品设备
  • 二、FPGA仿真WIFI模块通信过程
    • 仿真分析
    • 2.上板
  • 总结

一、创建云平台产品设备

在这里插入图片描述
在这里插入图片描述
使用串口助手测试传输过程

在这里插入图片描述

相关信息记录
在这里插入图片描述
在这里插入图片描述

二、FPGA仿真WIFI模块通信过程

仿真分析

在这里插入图片描述

 //各个状态tx_data
    always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        uart_tx_data <= 8'd0;
    end
    else if((state==AT) && tx_count<8'd6 ) begin
        uart_tx_data <= cmd_AT[47 - tx_count *8 -:8];
    end
    else if((state==CWMODE) && tx_count<8'd15 ) begin
        uart_tx_data <= cmd_CWMODE[119 - tx_count *8 -:8];
    end
    else if((state==RST) && tx_count<8'd10 ) begin
        uart_tx_data <= cmd_RST[79 - tx_count *8 -:8];
    end
    else if((state==CWJAP) && tx_count<8'd31 ) begin
        uart_tx_data <= cmd_CWJAP[247 - tx_count *8 -:8];
    end
    else if((state==CWDHCP) && tx_count<8'd17 ) begin
        uart_tx_data <= cmd_CWDHCP[135 - tx_count *8 -:8];
    end
    else if((state==MQTTUSERCFG) && tx_count<8'd172 ) begin
        uart_tx_data <= cmd_MQTTUSERCFG[1375 - tx_count *8 -:8];
    end
    else if((state==MQTTCONN) && tx_count<8'd45 ) begin
        uart_tx_data <= cmd_MQTTCONN[359 - tx_count *8 -:8];
    end
    else if((state==MQTTSUB) && tx_count<8'd67 ) begin
        uart_tx_data <= cmd_MQTTSUB[535 - tx_count *8 -:8];
    end
    else if((state==MQTTPUB) && tx_count<8'd123 ) begin
        uart_tx_data <= cmd_MQTTPUB[983 - tx_count *8 -:8];
    end
    else begin
        uart_tx_data <= uart_tx_data;
    end
end
always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        state <= IDLE;
    end
    else begin
    case(state)
        IDLE:begin
               state<=AT;
        end
        AT:begin//at test
            if(tx_count==8'd6)begin
                state <= WAK_AT;
            end
            else begin
                state <= AT;
            end
        end
        WAK_AT:begin
            if(rx_count==8'd2)begin
                state <= CWMODE;
            end
            else begin
                state <= WAK_AT;
            end
        end
        CWMODE:begin//set mode
            if(tx_count==8'd15)begin
                state <= WAK_CWMODE;
            end
            else begin
                state <= CWMODE;
            end
        end
        WAK_CWMODE:begin
            if(rx_count==8'd2)begin
                state <= RST;
            end
            else begin
                state <= WAK_CWMODE;
            end
        end
        RST:begin//at rst
            if(tx_count==8'd10)begin
                state <= WAK_RST;
            end
            else begin
                state <= RST;
            end
        end
        WAK_RST:begin
            if(rx_count==8'd2)begin
                state <= CWJAP;
            end
            else begin
                state <= WAK_RST;
            end
        end
        CWJAP:begin//at rst
            if(tx_count==8'd31)begin
                state <= WAK_CWJAP;
            end
            else begin
                state <= CWJAP;
            end
        end
        WAK_CWJAP:begin//at rst
            if(rx_count==8'd2)begin
                state <= CWDHCP;
            end
            else begin
                state <= WAK_CWJAP;
            end
        end
        CWDHCP:begin//at rst
            if(tx_count==8'd17)begin
                state <= WAK_CWDHCP;
            end
            else begin
                state <= CWDHCP;
            end
        end
        WAK_CWDHCP:begin//at rst
            if(rx_count==8'd2)begin
                state <= MQTTUSERCFG;
            end
            else begin
                state <= WAK_CWDHCP;
            end
        end
        MQTTUSERCFG:begin//at rst
            if(tx_count==8'd172)begin
                state <= WAK_MQTTUSERCFG;
            end
            else begin
                state <= MQTTUSERCFG;
            end
        end
        WAK_MQTTUSERCFG:begin//at rst
            if(rx_count==8'd2)begin
                state <= MQTTCONN;
            end
            else begin
                state <= WAK_MQTTUSERCFG;
            end
        end
        MQTTCONN:begin//at rst
            if(tx_count==8'd45)begin
                state <= WAK_MQTTCONN;
            end
            else begin
                state <= MQTTCONN;
            end
        end
        WAK_MQTTCONN:begin//at rst
            if(rx_count==8'd2)begin
                state <= MQTTSUB;
            end
            else begin
                state <= WAK_MQTTCONN;
            end
        end
        MQTTSUB:begin//at rst
            if(tx_count==8'd67)begin
                state <= WAK_MQTTSUB;
            end
            else begin
                state <= MQTTSUB;
            end
        end
        WAK_MQTTSUB:begin//at rst
            if(rx_count==8'd2)begin
                state <= MQTTPUB;
            end
            else begin
                state <= WAK_MQTTSUB;
            end
        end
        MQTTPUB:begin//at rst
            if(tx_count==8'd123)begin
                state <= WAK_MQTTPUB;
            end
            else begin
                state <= MQTTPUB;
            end
        end
        WAK_MQTTPUB:begin//at rst
            if(rx_count==8'd2)begin
                state <= IDLE;
            end
            else begin
                state <= WAK_MQTTPUB;
            end
        end
        
        
        default:state <= IDLE;
        endcase
    end
    end

接收数据判断只是简单做了一下,因为是正确回应的话所有的指令最后都是OK。所以可以一直缓存16位数据,当持续时间大于串口接受结束标志之间的间隔后进行判断,如果最后接收到的缓存16位数据是“OK”,则进入下一个状态即可,仿真只是检验一下过程,没做这一块。

按照第一部分设置的AT指令进行发送,主要就是一个状态机,一个是数据缓存发送。

2.上板

在这里插入图片描述
上传了3种数据,分别是温度。湿度。光照强度。实测成功

在这里插入图片描述
在这里插入图片描述

演示视频:

基于fpga的数据上云展示平台,esp8266模块连接fpga开发板和中国移动onenet

总结

踩得坑:正点原子的esp8266模块不用刷固件,mqtt直接用,买其他的esp8266 -01需要刷固件,我还没买底座,比较麻烦,后来索性换了正点原子的wifi模块。其实用其他的效果一样,都是AT指令+MQTT,只不过需要刷固件。

参考:CSDN大佬们 ID:紧邻的二氧化碳

虽然但是fpga做这些没什么优势,但是架不住有些毕业设计需要,emmmm当个参考吧。

相关文章:

  • RCE复现
  • 深度学习查漏补缺:3.从 Sigmoid 到 GELU
  • 【LeetCode Solutions】LeetCode 101 ~ 105 题解
  • 加载MiniLM-L12-v2模型及知识库,调用Deepseek进行问答
  • 全面解析 Spring AOP 切入点表达式
  • 【导航定位】GNSS数据说明-RTCM
  • RabbitMQ高级特性--TTL和死信队列
  • socket演示程序3(udp)
  • 《符号之纱与血肉之躯:具身智能范式的哲学重构与AI发展新图景》
  • 透过TCP/IP看HTTP
  • 深度学习篇---模型GPU训练
  • 监控平台——SkyWalking部署
  • Spring AOP中为所有类型通知传递参数的完整示例,包含详细注释和参数传递方式
  • 【数据结构】哈夫曼树
  • 74. Linux设备树详解
  • 基于springboot课程学习与互动平台(源码+lw+部署文档+讲解),源码可白嫖!
  • SQL注入点判断数据库类型
  • 从“制造”到“智造”:生产线自动检测的技术变革与实践
  • 【力扣hot100题】(017)矩阵置零
  • 火山引擎智能数据洞察 ChatBI 适配 DeepSeek-R1 及 DeepSeek-V3
  • 网络系统管理属于哪类专业/关键词seo排名怎么做的
  • 装修素材图片都从什么网站找/网站优化网站优化
  • 公路建设新闻网站/做百度推广的网络公司
  • 织梦转WordPress插件/网络推广seo教程
  • 网站备案负责人/旺道seo
  • php做网站都需要学什么软件/云南网站seo服务