ESP8266实现网页交互

2023-11-10

 

前言:

物联网LOT(intermet of things)时代,万物互联,wifi芯片是非常重要的,乐鑫的高性价比的ESP8266芯片凭借低功耗低成本高集成度等优势在市场上占有较高的份额,为什么选用这款芯片可以参考之前的调研报告。在之前的资料整理中,涉及到了硬件设计及软件下载开发等多个方面,但是在软件SDK如何开发,程序如何下载等方面学的并不够细致,在一些场景下,需要我们基于官方提供的程序进行二次开发,但是打开程序后,一看,都是什么鬼,完全无法入手,资料那么多,我又该从哪开始看,希望经过本轮的学习,能够快速的对该芯片进行二次开发。

接下来开始我们的学习吧。(整个学习框架可配合思维导图进行查看)

程序开发使用乐鑫官方提供的NONOS-SDK进行开发,并且之前主要开发单片机,所以更习惯使用集成开发环境,接下来也使用安信可提供的IDE进行开发,不过你也可以使用乐鑫提供的liunx开发环境进行开发。

一.环境搭建

工具

版本

说明

ESP8266 IDE

V0.5

集成开发环境,用于程序的开发及编译(安信可提供)

Flash_download_tools

V3.6.5

程序下载工具(乐鑫)

NONOS-SDK

V3.0

SDK开发包(乐鑫)

ESP-12F.pdf

 

模组原理图及说明

ESP8266调试工具_V2.1

V2.1

调试工具(安信可)

 

安信可资料获取:https://wiki.ai-thinker.com/esp8266

乐鑫资料获取:https://www.espressif.com/zh-hans/support/download/other-tools

 

无论使用乐鑫做的模组还是安信可制作的模组,原理是一样,可能也就是IO口分布不太一样,当我们购买了单模组可以直接通过简单搭建进行测试,也可以直接购买测试板,模组的以下几个引脚需要注意。

一般的测试板都是通过在GPIO0加个按键来实现模式的切换,这里我们使用安信可的ESP-12F进行测试。

 

接下来我们需要安装安信可IDE集成开发环境,软件从安信可官网可以下载,我使用的是的v0.5版本,那它怎么安装怎么使用呢???

https://wiki.ai-thinker.com/esp8266 这个网页里都有。

一步步看一下就行了。

 

那我们如何对下载的SDK进行配置,导入及编译呢???

 

二.SDK的下载及编译

现在我们从乐鑫官网下载最新的无系统SDK,ESP8266_NONOS_SDK-3.0,进行解压

我们会看到如下文件夹,为了更好的理解,简单说下各个文件夹的作用。

driver_lib重命名为app(用户程序文件,命名随意),然后将examples下文件夹复制到app目录下,例:将lOT_Demo(任意实例)文件替换到app文件夹,为了简化结构,删除整个examples文件夹,ESP8266_NONOS_SDK/third_party/makefile 重命名为 makefile.bak ,以防止编译时报错,接下来,我们启动 ESP_IDE,将项目导入 Eclipse

https://wiki.ai-thinker.com/ai_ide_use (详细步骤可查看这个网址)

导入后就可以进行编译啦,编译前需要进行保存,否则编译的为未保存之前的文件。

编译前clean project.我们可以看到已经编译出了可以下载的固件。通过这个实例我们可以将程序进行简单的修改,就能成为我们自己的工程。

注:使用ESP8266_NONOS_SDK 2.x的版本是可以正常编译的,由于我使用的3.0版本,直接这个步骤会报错,所以根据3.0版本还需要做一些修改。

打开工程sdk的顶层makefile,找到配置变量SPI_SIZE_MAP,修改为432Mbit flash

以下为编译成功信息。

 

三.将SDK整理成模板

现在将sdk 3.0的程序整理一下之后作为模板进行使用。调整app文件夹文件如下

 

其他文件均删除。User_main.c中剩余user_init,和user_pre_init。

user_init:上层程序的入口函数,给用户提供一个初始化接口。

user_pre_init:配置RF初始化,注册地址信息等。

2.0版本与3.0部分函数有一点区别,2.0不再单独说明。

Esp8266实际上就是一个单片机,在以往的单片机开发中,我们都知道会有main函数作为入口函数然后有死循环,同时还会有定时器等。

例:

int main(void)

{

初始化

While(1)

{

主循环进行处理

}

}

Void xxx_IRQ(void) //中断

{

中断处理

}

ESP8266 SDK编程基于“内核回调”的方式:(功能均在库中实现,对用户不透明)

Void user_init(void)//内核为用户提供的初始化接口函数

{

//IO口,定时器,中断等的初始化

}

*****以下为sdk内部操作***

{

User_init();//用户应用初始化

While(1)

{

//执行内核功能

//执行用户功能 例:用户初始化了一个1s定时,那么这里将进行定时器计时

}

}

回调函数:当满足条件是,内核会调用回调函数

例:user_init中初始化1s定时。

然后直接从void xxx_cb(void)回调函数中做相应的操作就可以了。那么esp8266有几种函数形式呢??分为四类:应用函数 回调函数 用户任务 中断函数

应用函数说白了就是我们平时封装的函数,主要实现一些功能,被其他函数调用。

回调函数就是初始化后,满足条件会被调用。用户任务,在系统空闲的时候,会调用任务函数,任务函数Non-os中,只支持3个用户任务,优先级2>1>0.中断函数就不解释了。详细的可以查看官方的sdk编程指南,里面有详细的解释。

四.简单的程序编写

模板现在有了,为了更快的使用SDK开发,接下来我们使用模板写一个简单的hello world

串口打印程序吧。参考文档:2c-esp8266_non_os_sdk_api_reference_cn(api说明文档)

  1. 添加.h头文件
  2. User_init中调用api打印函数

os_printf("SDK version:%s\n",system_get_sdk_version());//打印版本

  1. 由于8266默认串口0打印波特率为 74800,所以需要重配置一下,要想重配置就要调用串口驱动中的函数,接下来添加串口驱动。

sdk->driver_libdirverinclude 中的文件添加到app下的对应文件夹下。

  1. 引用.h文件。
  2. 然后下载验证

现象正常,此时第一个程序就验证完成了。

 

其他的驱动操作步骤都是类似的就不一一去操作了。

五.实现网页控制

我们当前的目的是写一个网页,通过控制网页来实现led亮灭的控制。那么该如何实现呢,让我们进行下关键点的梳理。

 

Esp8266相当于作为一个web服务器,当我连接wifi后通过外部设备输入相应的IP,esp8266进行解析,将存储在8266,falsh中的网页读取并显示出来,当我点击网页上的按钮后,8266进行解析,控制灯亮。网页与服务器之间使用Get/POST协议。

 

首先,将ESP8266作为AP模式,创建局域网。使外部设备能够接入ESP8266,

Esp8266建立TCP server,打开相应端口,接收客户端的访问数据,进行相应的应答。

写一个html网页,将网页烧写入FLASH中的user_param区中。

当客户端以指定的格式发送数据给服务器时,发送网页给客户端。

1.8266设置AP模式,建立wifi热点

  1. 创建TCP_server,建立帧听
  2. 等待clientl连接server,等待接收数据
  3. 根据接收的数据,读取flash中的网页,返回给浏览器。
  4. 当按下网页上按钮后,进行灯的亮灭控制。
  5. Html的制作,下载到flash中相应位置。

注:以手机浏览器为例,其访问的ip地址,过程是怎样的?

我们把8266作为服务器端,手机浏览器作为客户端,一般都是使用get请求,除非指定post提交。请求后,8266肯定要以http协议数据来回复内容的

1.知识扩展

(1)网络结构:

接下来我们说一下网络结构。

学过网络的都知道

OSI模型七层结构:应用层,表示层,会话层,运输层,网络层,数据链路层,物理层。

TCP/IP 协议四层结构:应用层,传输层,网络层,网络接口层。

常用的五层协议:应用层(TFTP,HTTP,FTP,DNS,Telnet),传输层(TCP,UDP),网络层(IP,ICMP(ping),RIP,OSPF,BGP,IGMP),数据链路层(SLIP,CSLIP,PPP,ARP,RARP,MTU),物理层。

 

例:小A在小B处买了一本书,小B叫来了快递公司快递员小C,小C检查包装,并在包装上填写好物品名称,收获人,地址等信息,然后将包裹带回了快递公司给了物流处,物流处查看包装信息后是北京的包裹,就将包裹放在飞机上运往北京,北京快递员小D接收到后,检查包裹,查看地址,将包裹配送给小A。

 

小A和小B处在最上层,相当于应用层,依赖快递员小C和小D的服务。小C和小D为传输层,负责对书检查,打包等工作,填入地址等信息。快递公司物流处属于网络层,根据客户信息决定将包裹发到哪里,飞机属于网络接口层,以自己的方式完成物流处递交来的包裹运输。

 

1997年IEEE制定无线局域网的协议标准802.11,系列标准。使用星型拓扑,中心接入点叫做AP。使用802.11系列协议的局域网又称为wifi。

 

(2)GET/POST

 

GET和POST是什么?HTTP协议中的两种发送请求的方法。

HTTP是什么?HTTP是基于TCP/IP的关于数据如何在网中如何通信的协议。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。

(3)html制作

Esp8266设置AP模式,建立热点后,作为tcp_server等待client接入,此时使用手机连入网络,然后打开浏览器,输入192.168.4.1:8266 此时浏览器弹出界面。

输入url使用get机制,操作网页内部按钮使用post机制。

程序内部:

URL的解析,及从flash读取的数据到网页的转化该怎么实现

网页该怎么写??

打开dreamweaver,新建html网页

新建一个表单,设置为post方法,新建按钮用于提交表单。详细的可以自行学习网页制作相关知识。

我们平时访问百度等,可以通过浏览器抓一下过程,esp8266也要模拟该过程进行网页的提交,我使用火狐自带的抓包工具(F12),一般IE自带的抓包工具也可以。

 

 

 

 

 

 

六.固件下载:

我们要将生成的固件烧写到我们的板卡中,那么怎么下载呢

 

 

 

那么固件的烧写地址是怎么得到,FLASH地址是怎么分配的,详细可查看《安信可ESP8266入门教程》 《程序下载》

(1)NON-FOTA(不支持云端升级)

 

 

 

乐鑫不同版本的SDF可能会改变文件的烧写地址,以控制台输出地址为准。

(2)FOTA(支持云端升级)

 

 

 

 

实例一:

将web_server工程生成的文件下载到8266中,地址使用编译器提示的地址。

Html的地址放在0x64000地址。

通过手机连接ESP8266_HA wifi,密码12345678

使用浏览器输入192.168.4.1:8266

点击开灯按键,板卡上灯亮。

实例二.(支持微信一键配网,支持网页固件升级,支持网页参数配置)

将plug2.0进行编译,生成固件

输入192.168.40.117/upload,会弹出升级界面,进行网页的升级。

然后输入192.168.40.117进入主界面。

可控制灯,及网络相关参数配置。

 

 

八.项目应用

可将esp8266模块应用到大多数的板卡中,测试人员可通过连入网页实现对设备的升级,参数修改,降低维护成本。示意图如下所示:

输入192.168.40.117(之后固定使用192.168.4.1)会弹出如下界面

 

输入192.168.40.117/upload,弹出升级界面

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP8266实现网页交互 的相关文章

  • 宝塔面板忘记用户名,忘记密码怎么办?

    1 重新设置密码找回用户名 情况一 已经修改过用户名和密码 很多网上的解决方法都只是告诉我们进入SSH设置 但是很多小伙伴并不知道怎么进入SSH 导致解决该问题很麻烦 其实我们直接在阿里云中云服务器中的远程连接就可以解决这个问题 第一步 直
  • 利用security.js实现RSA加密

    在项目中遇到要对用户输入的密码进行RSA加密的需求 总结一下实现过程 div div
  • Android和java两平台AES的互相加密解密

    import java io UnsupportedEncodingException import java security InvalidKeyException import java security Key import jav
  • 什么是多态机制?Java语言是如何实现多态的?

    多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用 在编程时并不确定 而在程序运行期间才确定 即一个引用变量到底会指向哪个类的实例对象 该引用变量发出的方法到底调用哪个类中实现的方法 必须由程序运行期间才能决定 因为
  • 计算机系统唯一能识别的不需要翻译,第一章 计算机基础知识06966new.ppt

    第一章 计算机基础知识06966new ppt 第一章 计算机基础知识 2 1 计算机软件系统 输入计算机的信息一般有两类 一类称为数据 一类称为程序 计算机是通过执行程序所规定的各种指令来处理各种数据的 1 指令 是指示计算机执行某种操作
  • IntelliJ IDEA(九) :酷炫插件系列

    最近项目比较忙 很久没有更新IDEA系列了 今天介绍一下IDEA的一些炫酷的插件 IDEA强大的插件库 不仅能给我们带来一些开发的便捷 还能体现我们的与众不同 1 插件的安装 打开setting文件选择Plugins选项 Ctrl Alt
  • 尊云服务器出问题,云服务器用户常见问题

    云服务器用户常见问题 Q 装预装操作系统以后的默认密码是什么 A 默认的密码和云服务器开通时输入的密码是一样的 就是一个用户一个密码 不是固定的 Q 云服务器中如何划分硬盘的分区 A 云服务器系统系统安装后 默认只有一个10G的C盘用于操作
  • Android进阶:架构师花费近一年时间整理出来的安卓核心知识,聪明人已经收藏了!

    我们程序员经常迷茫于有太多东西要学 有些找不到方向 不知所措 很多程序员都愿意说 我想变得更好 但是更好是什么却很模糊 同时我们又不知道该怎么样去做 我们的生命如此短暂 作为程序员的职业生涯可能会更短 所以我们更加需要充分利用工作 工作间隙
  • 踩坑,发现一个ShardingJdbc读写分离的BUG

    前言 最近公司准备接入ShardingJdbc做读写分离了 老大让我们理一理有没有写完数据立马读的场景 因为主从同步是有延迟的 如果写完读取数据走到从库 而从库正好有延迟 没读取到数据 岂不是造成了生产事故 今天我们来看看 Sharding
  • CUDA和TensorRT入门

    CUDA 官方教程 CUDA C Programming Guide nvidia com 一 基础知识 首先看一下显卡 GPU 和CUDA的关系介绍 显卡 GPU和CUDA简介 吴一奇的博客 CSDN博客 延迟 一条指令返回的时间间隔 吞
  • 【无标题】【Atlas 200DK】YOLOv3和YOLOv5部署

    Atlas 200DK YOLOv3和YOLOv5部署 数据集介绍 开发板环境搭建 YOLOv3的部署 模型训练转换 服务器上的结果 开发板上的结果 python部署 c 部署 YOLOv5的部署 模型训练转换 服务器上的结果 开发板上的结
  • python 开发游戏的库有哪些

    在 Python 中 开发游戏的一些常用库有 Pygame 一个用于制作游戏的开源模块 支持多种图像 声音和输入处理 Pyglet 一个跨平台的游戏引擎 支持 OpenGL 图形渲染 PyOpenGL 一个实现了 OpenGL 功能的库 可
  • G2O

    slam十四讲 g2o代码运次错误 error no matching function for call to g2o BlockSolver
  • python中pd读取csv二进制_python用pd.read_csv()方法来读取csv文件

    importpandas as pdprint 取消第一行作为表头 data2 pd read csv rating csv header None print 为各个字段取名 data3 pd read csv rating csv na
  • vue中不同页面设置title和icon

    路由中增加meta对象 path accounting name accounting component gt import pages accounting Accounting vue 记账 meta title 芒果记账 icon
  • vue.js -- 事件绑定

    目录 绑定事件 定义事件 直接写表达式 获取事件对象event 获取自定义参数 获取参数和事件对象event 事件绑定多个函数 修饰符 事件修饰符 按键修饰符 鼠标修饰符 精确修饰符 绑定事件 定义事件 代码演示
  • Numpy 用 npy/npz 文件保存与载入数据

    Numpy 的数据保存与载入方法比 Python 的 pickle 要方便的多 而且由于目前大多数的复杂数据处理都使用 Numpy 因此相比较而言 npy npz 的 Numpy 数据保存与载入更为常用 函数说明 numpy load fi
  • URDF、Gazebo与Rviz机器人仿真综合应用-autolabor笔记

    URDF Gazebo与Rviz综合应用 6 7 1 1 机器人运动控制 编写机器人my base xacro 编写传动装置以及控制器move xacro文件 搭建环境world文件 将上述整合进一个car xacro文件 加载惯性矩阵xa
  • Pandas基础

    pandas pandas简介 Python Data Analysis Library pandas是基于NumPy 的一种工具 该工具是为了解决数据分析任务而创建的 Pandas 纳入了大量库和一些标准的数据模型 提供了高效地操作大型结

随机推荐

  • Python之保留字

    1 False 表示假 即在if语句中不会执行 注 在Python中可以给False赋值 改变原有是错误的意思 2 True 表示真 3 None None是一个特殊的常量 None和False不同 None不是0 None不是空字符串 N
  • 免密要登录

    ssh keygen t dsa P f ssh id dsa cat ssh id dsa pub gt gt ssh authorized keys t参数就是指定要生成的密钥类型 你这里指定的是dsa P就是你提供的旧密码 表示没有
  • 历届试题 分糖果 【模拟】

    历届试题 分糖果 时间限制 1 0s 内存限制 256 0MB 问题描述 有n个小朋友围坐成一圈 老师给每个小朋友随机发偶数个糖果 然后进行下面的游戏 每个小朋友都把自己的糖果分一半给左手边的孩子 一轮分糖后 拥有奇数颗糖的孩子由老师补给1
  • Linux 环境下Fortran程序连接使用Intel MKLPardiso解对称稀疏矩阵

    Linux 环境下Fortran程序连接使用Intel MKLPardiso解对称稀疏矩阵 pardiso求解线性方程组 A x b 其中 A 是对称稀疏阵 lt 1 gt Pardiso的Fortran接口 call pardiso pt
  • Effective C++学习笔记

    Effective C 1 让自己习惯C 2 构造 析构 赋值运算 命名习惯 lhs left hand side rhs right hand side 指向一个T型对象 的指针命名pt 意思是 pointer to T 尽量以const
  • 一、数据挖掘概述

    数据挖掘介绍 1 数据挖掘的定义 数据挖掘 指从大量的数据中通过算法搜索隐藏于其中信息的过程 数据挖掘在面向用户的互联网产品中发挥着及其重要的作用 2 数据挖掘的对象 常见的数据挖掘对象有以下7大类 关系型数据库 MySQL 非关系系数据库
  • Visual Studio Community 2022(VS2022)安装方法

    直接上步骤 1 首先可以下载安装一个Visual Studio安装器 叫做Visual Studio installer 这个安装文件很小 很快就安装完成了 2 打开Visual Studio installer 小软件 3 按照开发需求选
  • RocketMQ消息幂等(去重)通用解决方案

    消息中间件是分布式系统常用的组件 无论是异步化 解耦 削峰等都有广泛的应用价值 我们通常会认为 消息中间件是一个可靠的组件 这里所谓的可靠是指 只要我把消息成功投递到了消息中间件 消息就不会丢失 即消息肯定会至少保证消息能被消费者成功消费一
  • 实验报告-python文库_python大作业实验报告

    python大作业实验报告 大学计算机基础 理工 大作业 暨南大学南校区生活指南系统 G108 甘颖欣 熊梦娜 翁婉晖 梁绮婷 李嘉顺 2015 1 32 目录 目录 2 暨南大学南校区生活指南系统 选题说明书 3 1 成员分组和任务分工
  • CSS —— 手摸手实现一个文字霓虹灯闪烁特效

    CSS 手摸手实现一个文字霓虹灯闪烁特效 一 了解 text shadow 属性 text shadow 属性应用于阴影文本 属于 CSS3 的属性 默认值为 none text shadow 属性连接一个或更多的阴影文本 属性是阴影 指定
  • 贪婪的非分层灰狼优化算法(G-NHGWO)(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 狼优化 GWO 算法是基于灰狼社会等级及其
  • 织梦网站后台基本设置

    栏目概述 最主要还是说熟悉下网站后台基本设置 然后及我安装文件的常规操作 登陆网站后台 点击系统 基本参数 输入站点根网址 删除文档HTML默认保存路径a 填写下网站版权信息点击确定 小皮面板点击网站管理点开网站根目录删除install文件
  • java 输入_详解Java输入输出数据流模型和Web应用程序开发

    前言 Web应用开发架构技术不断的演化 从基于通用网关接口CGI开发的能够在操作系统上运行的独立组件 到专门的隔离运行的Servlet 一直到到现在我们对复杂应用开发使用Java EE技术或者Spring框架系列 其实其底层的核心逻辑基本上
  • Hystrix使用说明,配置参数说明

    四 配置信息 default或HystrixCommandKey 最常用的几项 超时时间 默认1000ms 单位 ms 1 hystrix command default execution isolation thread timeout
  • 1141:删除单词后缀(C C++)

    题目描述 给定一个单词 如果该单词以er ly或者ing后缀结尾 则删除该后缀 题目保证删除后缀后的单词长度不为0 否则不进行任何操作 输入 输入一行 包含一个单词 单词中间没有空格 每个单词最大长度为32 输出 输出按照题目要求处理后的单
  • BigQuery 如何帮助大规模交付业务型企业提供物联网解决方案

    介绍 Leverege是一家软件公司 它使全球市场领导者能够快速且经济高效地构建企业物联网应用程序 以提供以数据为中心的决策能力 优化运营 改善客户体验 交付客户价值并增加收入 Leverege 的主要 SaaS 产品 Leverege I
  • 不用虚拟机也能在Windows下使用Linux

    不用虚拟机也能在Windows下使用Linux 想学习热门的Linux系统 可是一开始就需要安装虚拟机软件 这样很容易消耗Linux初学者的热情 比如常用的VMWare虚拟机 虽然步骤并不复杂 但是一开始的搭建和配置过程 容易劝退一部分新手
  • 开源CA搭建-基于openssl实现数字证书的生成与分发

    目录 一 前言 二 openssl介绍 三 openssl的常用用法 一 单向加密 二 生成随机数 三 生成公钥 私钥 1 生成私钥 2 提取公钥 四 搭建CA 一 创建根CA私钥 二 生成自签名证书 三 创建数据库以及新颁发证书数字 四
  • Gitee Go代码格式审查、程序编译和冒烟测试

    本文分享自中移OneOS微信公众号 CI CD搭建流程 Gitee篇 作者 Kisann Gitee CI CD能力 Gitee 即码云 是OSCHINA NET推出的代码托管平台 已有超过600 万的开发者选择Gitee Gitee Go
  • ESP8266实现网页交互

    前言 物联网LOT intermet of things 时代 万物互联 wifi芯片是非常重要的 乐鑫的高性价比的ESP8266芯片凭借低功耗低成本高集成度等优势在市场上占有较高的份额 为什么选用这款芯片可以参考之前的调研报告 在之前的资