日知录(11):esp8266与WiFi

ESP8266

  • WiFi
  • ESP8266与NodeMCU区别
  • 环境搭建
  • 示例
    • eg1:连接WiFi
    • eg2:做一个Web服务器
      • 1.什么是网络层
      • 2.关于服务器的知识
      • 3.关于Web服务器
      • 4.代码
    • eg3:作为一个热点

WiFi

在用esp8266之前有很多疑问
1.什么是WiFi
2.WiFi能做什么
3.当一个物品装上WiFi模块之后能做什么

Wi-Fi是一种可以将个人电脑、手持设备(如pad、手机)等终端以无线方式互相连接的技术,事实上它是一个高频无线电信号。 Wi-Fi与蓝牙技术一样,同属于短距离无线技术,是一种网络传输标准。
一般架设无线网络的基本配备就是无线网卡及一台AP。
那么我们使用手机流量时的数据流量,数据流量是指通过GPRS、EDGE、TD-SCDMA、HSDPA、WCDMA、LTE等移动通信技术上网或使用相关数据增值业务所产生的数据流量,不包含通过WLAN、CSD等其他方式上网所产生的流量,不包含按内容计费的数据增值业务所核减的数据流量,也不包含Blackberry、Pushmail、M2M等集团客户及行业应用所产生的数据流量。
2.
WiFi在日常生活中就是上网啦,那么也作为物联网的一种重要的近距离无线通信技术,以智能家具为主。根据需求采用低功耗2.4G模块可轻易实现家庭设备互联,最终通过互联网或者基站建立远程控制联系。
3.
传输接收数据,和蓝牙相似,但比蓝牙更强大。是一个载体。

ESP8266与NodeMCU区别

首先介绍ESP8266:

ESP8266的Wifi功能很强大,能作为STA Client(站点)使用,同时也能作为AP(soft-access point模式,简称soft-AP),以上两种的集合模式,Station 兼Soft-Access Point,也是Mesh NetWork的实现基础。

明确ESP8266与NodeMCU的区别:

esp8266是芯片,wifi功能
esp8266芯片加上4MB spi flash(闪存)变成esp-12模块
esp-12模块加上底板,加上USB转串口变成NodeMCU

接下来解释 SPI flash

1、Flash用来存程序的,8266上电从Flash加载程序。当然余下部分可自己存数据。
2、按资料给的最小系统接就能工作了,复位+使能。如果是ESP-12,还有个GPIO15要接电阻到GND。收到ready就可以发AT命令了。
SPI:baiserial peripheral interface,串行外围设备接口,是一种常见的时钟同步串行通信接口。外置flash按接口分有总线flash,SPI flash。
总线flash需要你的MCU上有外部总线接口,SPI flash就是通过SPI口对flash进行读写。速度上,总线flash比SPI的快,但是SPI的便宜。
3. SPI Flash是一种使用SPI通信的Flash, 属于 nor flash,读写较慢,次数有限制,一般用于不经常更改的存储
4.对flash芯片的操作,一般包括对flash芯片的擦除,编程和读取
5.擦除方式:扇区擦除(4KBytes),半块擦除(32KBytes),块擦除(64KBytes),片擦除。
6.编程方式(也就是写数据):页编程(256Bytes),扇区编程(4KBytes)。
7.擦除后数据就是0xFF,

环境搭建

使用的是win10+arduino编译
1.之前一直是通过在arduino的首选项中,增加板件地址。然后在tools–board–Boards Manager(开发板管理)里面下载esp8266,但从官网上下的速度实在感人,也总是报错。报错如下图:

下载 http://downloads.arduino.cc/packages/package_index.json 时出错

2.选择了手动在arduino文件夹内添加8266的包。
结果在试示例的时候还是有错,如下:

exec: "/bin/xtensa-lx106-elf-g++": file does not exist 
Arduino IDE for esp8266 

在论坛内找到的解释是:

是因为没有从boards manager下载esp8622,导致版本不同,lib库的缺少
因为xtensa-lx106-elf-gcc这个工具没有完整安装,删除当前版本的8266 开发板,然后重新安装一次即可

3.试过在VScode 里面搭环境,下载PlatformIO插件,但是它对中文路径不是很友好,关于中文用户名的路径问题在很多地方都遇到过,实在有点头疼,最直接的办法就是换个电脑了,下个电脑的用户名一定要用英文!在New Project 时报错如下:

Could not initialize project PIO Core Call Error: "The current working directory 

4.最后找到了一个arduino+esp8266的压缩包直接安装,完事儿。

示例

8266的生态确实很好,所以有点眼花缭乱,就在此做点整理。
此处的三则实例参考:ESP8266与NodeMCU开发(二)基础实验三则
第一步肯定是blink,通电检验一下是否正常。
之后就来上实例。
物联网(IoT)

eg1:连接WiFi

// 功能:连结WiFi,获取IP地址,串口输出IP信息
#include 
#include 
#include 
#include 
 
#define WIFINAME "******"
#define WIFIPW   "*********"
 
void setup() {
  // put your setup code here, to run once:
  pinMode(BUILTIN_LED, OUTPUT);
  Serial.begin(115200);
  Serial.println("");
  WiFi.begin(WIFINAME, WIFIPW);
  Serial.print("Connecting..");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".ing");
  }
  Serial.println();
  Serial.print("Connected,IP Address:");
  Serial.println(WiFi.localIP());
 
 
  
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}

串口监视器显示结果:
日知录(11):esp8266与WiFi_第1张图片

完成之后我们可以用一个ping指令来检验与远程计算机或本地计算机的连接。
日知录(11):esp8266与WiFi_第2张图片

eg2:做一个Web服务器

1.什么是网络层

一文看懂什么是OSI七层协议

TCP/IP协议中的TCP相当于OSI中的传输层。
OSI参考模型是ISO的建议,它是为了使各层上的协议国际标准化而发展起来的。OSI参考模型全称是开放系统互连参考模型。这一参考模型共分为七层:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
esp8266 涉及到传输层中的一些传输控制协议,如TCP,UDP,SPX。
日知录(11):esp8266与WiFi_第3张图片
上图参考:一句话记住“网络七层协议”模型
日知录(11):esp8266与WiFi_第4张图片
TCP/IP协议四层。
1、应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。
2、运输层:作为TCP/IP协议的第二层,运输层在整个TCP/IP协议中起到了中流砥柱的作用。且在运输层中,TCP和UDP也同样起到了中流砥柱的作用。
3、网络层:网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。
4、网络接口层:在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
看完这篇博主的描述加深理解。OSI七层模型、TCP/IP四层

2.关于服务器的知识

百度词条解释服务器

服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。
简单说服务器就是更高级的电脑,只不过电脑是发送请求的客户端,服务器是接受服务请求,并及时给与反馈的服务端。
参考:服务器分类
日知录(11):esp8266与WiFi_第5张图片

3.关于Web服务器

Web服务器:
Web Server 就是提供 Web 服务的 Server
一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档。
Web服务器作用:
1、放置网站文件,让全世界浏览;
2、可以放置数据文件,让全世界下载。
Web服务器分类:
1、Apache;
2、Nginx;
3、IIS。
Web服务器工作原理可分为四个步骤:
连接过程、请求过程、应答过程以及关闭连接。

一般来说, Web Server 对外提供的是 HTTP 服务(也可以是其他服务),这>就是为什么我们的网址都以「http://」开头。

Web就是在Http协议基础之上,利用浏览器进行访问的网站。“http://”,这个前缀规定了我们浏览器与web服务器交互的时候使用http(超文本传输)协议,实际上浏览器可以有很多协议,比如还支持ftp(文件传输)协议,还有最新的websocket的协议(ws://)。
参考:用各种方法搭建自己的个人服务器
HTML称为超文本标记语言
TCP:我们的网络通信都是建立在TCP/ip协议上,比如访问4399的时候其实访问的是DNS服务器解析出来的某个ip,看得出来图中访问的是4399的某个节点
Web服务器的主要职责是服务静态页面,例如,以HTTP协议传输的HTML页面。
一个简单的应用场景:用户在浏览器(客户端)输入URL并且开始浏览网页。那么服务器所做的就是发送一个静态页面到客户端,传输的信息是通过指定了请求和响应格式的HTTP协议。

4.代码

了解了上述关于网络的背景知识后,对这个Web服务器的理解是不是更深了点呢,我认为这也是WiFi不同于蓝牙的一点了。


//直接作为一个网页客户端来使用
#include 
#include 
#include 
#include 
ESP8266WiFiMulti WiFiMulti;
 
#define HTTPIP      "14.215.177.37"//baidu
#define HTTPPORT    80
#define WIFINAME    "******1"
#define WIFIPW      "*******"
 
 
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println();
  Serial.println("Connecting");
  WiFiMulti.addAP(WIFINAME,WIFIPW);
  while(WiFiMulti.run()!=WL_CONNECTED)
  {
    delay(500);
    Serial.print(".ING");
  }
  Serial.println("Connected!");
  
}
 
void loop() {
  // put your main code here, to run repeatedly:
HTTPClient http;
Serial.println("Try link to http.");
http.begin(HTTPIP,HTTPPORT,"/");
int Code = http.GET();
if(Code)
{
    Serial.printf("HTTP Code:%d\n",Code);
    if(Code == 200)
    {
      String payload = http.getString();
      Serial.println(payload);
    }
    else
{
  Serial.println("Couldn't link to server");
}
}
 
 delay(5000);
}

串口监视器显示输出:
日知录(11):esp8266与WiFi_第6张图片
查看Web网页(这是成功返回我们程序设置的内容):
日知录(11):esp8266与WiFi_第7张图片

查看网页源代码:
日知录(11):esp8266与WiFi_第8张图片

eg3:作为一个热点

类似于手机开热点。
软AP也叫做Soft-AP,硬件部分是一块标准的无线网卡比如ESP8266,但其通过驱动程序使其提供与AP一样的信号转换、路由等功能。
将ESP8266设置为一个热点,可供其他设备连接并交换数据,主要使用的函数:WiFi.softAP(ssid, password, channel, hidden)

#include 
IPAddress local_IP(192, 168, 4, 4);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  WiFi.softAPConfig(local_IP, gateway, subnet);
  WiFi.softAP("SoftAP001", "999999999");
  Serial.print("Soft-AP IP address = ");
  Serial.println(WiFi.softAPIP());
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}

视频效果如下:
ESP8266网络应用1-生成无线热点
参考: 博哥零基础教你玩转ESP8266(七) Soft AP —— 谁想连上我

你可能感兴趣的:(笔记)