前言:

物联网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_lib下dirver和include 中的文件添加到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,弹出升级界面

ESP8266实现网页交互相关推荐

  1. 以太坊智能合约开发第七篇:智能合约与网页交互

    原文发表于:以太坊智能合约开发第七篇:智能合约与网页交互 上一篇中,我们通过truffle开发框架快速编译部署了合约.本篇,我们将来介绍网页如何与智能合约进行交互. 编写网页 首先我们需要编写一个网页 ...

  2. pyqt5讲解9:时间模块timer和网页交互

    time 如果要在应用程序中周期性地进行某项操作,则需要用到QTimer定时器,QTimer类提供了重复的和单次的定时器.要使用定时器,需要先创建一个QTimer实例,将其timeout信号连接到相应 ...

  3. 微信小程序与内嵌网页交互实现支付功能

    上个月,小程序开放了新功能,支持内嵌网页,所以我就开始了小程序内嵌网页之路,之前我只是个小安卓. 内嵌网页中可使用JSSDK 1.3.0提供的接口,可坑就来了,居然不支持支付接口的调用,经过一番研究, ...

  4. python 使用mechanize进行web网页交互

    1. 有状态的网页 所谓有状态的网页就是区别于传统html的动态交互式页面,它与用户进行交互显示不同的结果.下面我以新浪邮箱的登陆界面为例: 上面有一个用户登陆的表单,当我们输入正确地用户名密码之后, ...

  5. Matlab网页交互

    借助Matlab进行网页交互实现网页端的自动打卡 具体要求: 定位获取 页面内文字输入 实例: 以下为大佬"打浦桥程序员"的网页自动登录代码: ie=actxserver('int ...

  6. wechat-小程序web-view与网页交互

    title: wechat-小程序web-view与网页交互 categories: Wechat tags: [wechat, web-view] date: 2018-10-26 14:13:18 ...

  7. css网页技术的网页交互方法

    CSS (Chrome Sheet Service)是一个流行的基于网页技术的网页交互方法.它能够创建一个页面,并且在页面上添加一个简单的图形化的页面.CSS结合了 PHP, JavaScript, ...

  8. 微信小程序与H5内嵌网页交互实现地图定位功能

    小程序中有很多好用的API,整个项目我们是用vue实现的,使用小程序的内嵌网页功能完成交互. 使用小程序的< web-view >标签将vue项目在小程序中运行.大概的背景就是这样.接下来 ...

  9. 用python写一个商城网页服务器并且实现数据库和网页交互

    用python写一个服务器并且实现数据库和网页交互 本文简介 1.需要实现的功能逻辑 2.设计想法 3.数据库设计 4.代码实现: 服务器类代码 应用程序框架代码 商城类代码(实现数据库交互) 5.运 ...

最新文章

  1. CSS jQuery制作漂亮的文字模糊效果
  2. 【学习笔记】深入理解js原型和闭包(5)——instanceof
  3. JVM SandBox 的技术原理与应用分析
  4. 从0开始学Java——JSPServlet——HttpServletRequest相关的几个路径信息
  5. threadgroup_Java ThreadGroup toString()方法与示例
  6. 【Docker】Docker 启动prometheus报错 parsing YAML file /etc/prometheus/prometheus.yml: yaml: unmarshal
  7. Qt——P14 Lambda表达式
  8. 计算机与体育教育的关系,试论现代信息技术与体育教育的关系论文.doc
  9. 可怕!离职都开始内卷了?!
  10. 圆通快递单号yt开头_乡镇快递取件二次收费,四川省消委会点名这些快递公司...
  11. 2017华为面试算法题小结
  12. 优炫数据库收到来自重庆市统计局的感谢信
  13. Python文本加密 或 文本文件加密
  14. HTTPHEAD中referer应用
  15. 计算机科学与技术民办大学排名,计算机科学与技术专业排名:这95所大学实力很强,包括公办、民办和中外合办院校...
  16. kirin710f是什么处理器_华为kirin710f处理器相当于骁龙几
  17. 自己设置假期的日历控件_在假期旅行时使用PC娱乐自己
  18. 锐龙r75800h和酷睿i511400h差距多大 r7 5800h和i5 11400h核显
  19. 样条曲线长度--数值积分
  20. C# Revit二次开发基础/核心编程--- Application\Document\Transaction

热门文章

  1. 高数 函数可导,导函数不一定连续
  2. 2022年一级注册建筑师考试设计前期与场地设计复习题及答案
  3. 000709,G唐钢,今天2.92元进入,立此存照!
  4. 小程序 getApp扫码体验获取不到值
  5. AE脚本常用学习第1天
  6. php中var_dump是什么意思?
  7. power shell 批量修改文件名
  8. 优漫动游UI设计怎么学?UI设计师工资一般多少?
  9. 【计算机视觉处理3】图像基本处理
  10. 桥梁模式 Bridge Patter