QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

ESP8266 和 NodeMCU:高性价比的物联网解决方案

  • 2015-11-06
  • 本文字数:2705 字

    阅读完需:约 9 分钟

为了实现在设备间的通信,人们发明了各种不同的解决方案:蓝牙、Zigbee、XBee、NRF2401、红外等等,他们适合在不同环境、不同场合下使用。在这其中,WiFi 则更适合用来为嵌入式设备提供网络功能。WiFi 不仅和蓝牙一样可以和手机直接连接,而且可以直接连接到互联网。

WiFi 简史

WiFi 是一种可以将个人电脑、移动设备、游戏机或数字音频播放器从一定范围内的无线网络连接到网络的技术。最早的 WiF 标准是 1997 年出现的 802.11 标准,然后就是 1999 年出现的 IEEE 802.11b 标准,即我们通常说的 WiFi。第三代 WiFi 是 2002 年左右推出的 802.11g/a 标准。从 2007 年开始一直沿用到现在的 802.11n 标准是第四代 WiFi。

WiFi 只是一个标准,为了将我们的设备连上网络,我们还需要路由器。尽管已经找不到最早诞生的无线路由器了,但是说起路由器就不得不说到 Linksys 生产的最著名的产品 WRT54G。当时为了降低成本,Linksys 决定在这个设备上使用基于 Linux 操作系统的固件。随后就诞生了 OpenWRT,一个开源免费的嵌入式 Linux。由于这个路由器开源出来的软件方案,使得这个系统在这个领域颇受欢迎。也因此有了今天的各种智能路由器,如小米路由器、极路由等等。

在 WiFi 芯片领域长期以来使用的是 32 位的 MIPS 核心的处理器。作为主要的 WiFi 解决方案提供商 Broadcom、Atheros、Ralink、Marvell 等都主要采用这个核心。由于 ARM 架构已经占领了绝大多数的手机芯片市场,一些产商也在开始使用 ARM 方案,如 Realtek 的 Ameba,以及联发科的 LinkIt ONE。但是由于这些芯片都存在一个造价高的问题,Espressif 在这时推出了 ESP8266。

ESP8266

ESP8266 是一块由乐鑫 espressif 设计的 wifi 芯片,虽然它的定位是个 Wi-Fi 网络解决方案,但它更像一个物联网解决方案。它不仅体积小——大概 11*10 毫米左右,而且造价便宜,一个 ESP8266 的集成板只需要十几块。相比之下,在同等类似的芯片中,WRTNode 需要一百多,而 Particle(Spark Core)则需要更多的花费。

ESP8266 的核心是一块 Diamond Standard 106Micro 控制器,一个低功耗的 32 位 RISC 控制器。它拥有 GPIO、I2C、ADC、SPI、PWM 等模块,你可以用它做一些微控制器能做的事。它还可以支持 AP(Access Point)、STA(Station)、AP+STA 共存模式,并且使用高效的 AT 指令。

如同官方所示,它还具有下面的一些特性:

  • SDIO 2.0、SPI、UART 接口
  • 32-pin QFN 封装
  • 集成 RF 开关、 balun、LNA、 24 dBm PA 、DCXO 和 电源管理单元(PMU)
  • 集成 RISC 处理器、片上存储器和外部存储器接口
  • 集成 MAC/ 基带处理器
  • 高品质的服务管理
  • 高保真音频应用所需的 I2S 接口
  • 所有内部供电均包含片上低压差线性稳压器
  • 专有的无杂散时钟生成架构
  • 集成 WEP、 TKIP、AES 和 WAPI 引擎
  • 工作温度范围:-40C ~ 125C

由于其性价比高,一些国外的爱好者甚至成立了一个 ESP8266 的社区论坛: ESP8266 Community Forum ,来分享一些用 ESP8266 创造新奇的玩意儿。它们也在 Github 上开源了一些相关的项目,如ESP8266 Core for Arduino。在这个项目中,你可以直接在ESP8266 上使用Arduino 的函数和库。

ESP8266 Core for Arduino

我们只要在 Additional Board Manager URLs 中添加 ESP8266 Core for Arduino 项目的 API ,然后在 Tools > Board 中打开 Boards Manager,再安装完 ESP8266 平台就可以使用它了。

随后,连接上我们的 ESP8266 模块,打开 Arduino 的示例:

复制代码
void setup() {
pinMode(BUILTIN_LED, OUTPUT);
}
void loop() {
digitalWrite(BUILTIN_LED, LOW);
delay(1000);
digitalWrite(BUILTIN_LED, HIGH);
delay(2000);
}

编译、上传,我们就可以看到我们的 LED 在闪烁了。对于那些习惯使用 Arduino 编程方式的人来说,这无疑是一个特别好的消息——他们可以直接在上面运行他们原有的应用。此外你还可以使用 TCP 和 UDP 协议进行通信、建立 HTTP、mDNS、SSDP 和 DNS 服务器、进行 OTA 更新、在闪存中使用文件系统、SD 卡、舵机等等。这已然可以和 Arduino 做同样的事情,并且速度还可能更快。

另外一个不得不提及的 ESP8266 开发板就是——NodeMCU(在 ESP8266 Core for Arduino 项目中也可以选择这个开发板)。

NodeMCU

NodeMCU 是一款基于 ESP8266 的开源快速硬件原型平台,包括固件和开发板,用几行简单的 Lua 脚本就能开发物联网应用。

NodeMCU 历史与背景

NodemMCU 芯片是乐鑫公司基于他们的前一代芯片 ESP8089 研发的。乐鑫公司主营 Wi-Fi 无线芯片的研发,他们的主打产品 ESP8089 经过五年的研发和优化,已经达到高主频、超低耗、低成本的市场要求。2013 年下半年,乐鑫公司出了 ESP8266,进入中低端智能硬件市场。

而 NodeMCU 项目的发起人是黄锐,发起这个项目的时候他还是一名在读研究生。当时黄锐想把正在制作的脑电波传感器加上 WiFi 功能,便开始选型 WiFi 芯片。他在了解到 ESP8266 的内核 LX106 后,发现这个芯片性能颇为强大,比起畅销的 MTK7681 更胜一筹。基于 ESP8266 的脑电波传感器完成之后,黄锐决定再做点什么,来消除软件工程师和硬件工程师的隔阂。和开源社区爱好者 zeroday 商量后,他决定发起一个 NodeMCU 项目。NodeMCU 的 Firmware 是由 zeroday 主导,并和黄锐共同完成的。起初他们想在上面移植 JS,但是受限于 8266 的内存,便考虑使用 Lua。因为脚本语言比较轻量,而且支持 c 编写,几行代码就能搞定别人很多代码量的工作。

NodeMCU 示例

作为一名程序员,我们对脚本语言与编译型语言的印象就是:脚本语言更适合原型开发——能用简洁的方式表达我们的想法。当然,使用脚本语言还可以省略搭建编译环境的过程,我们就不需要下载动辄上百 M 的 SDK、开发环境。

举个例子,我们可以用下面的代码点亮引脚 1:

复制代码
pin = 1
gpio.mode(pin,gpio.OUTPUT)
gpio.write(pin,gpio.HIGH)

我们可以在敲入代码的同时观察开发板的变化,这个特性在设计原型过程中非常有用。同样的,为了实现一个 HTTP 服务,在 ESP8266 Arduino 中大概只需要 50 行代码,在传统的 C 语言中就需要上百行。而在 NodeMCU 中则可以:

复制代码
conn=net.createConnection(net.TCP, false)
conn:on("receive", function(conn, pl) print(pl) end)
conn:connect(80,"121.41.33.127")
conn:send("GET / HTTP/1.1\r\nHost: www.nodemcu.com\r\n"
.."Connection: keep-alive\r\nAccept: */*\r\n\r\n")

代码行数越多,维护成本越高。

当然 NodeMCU 只是其中的一个选择,但是它可以更快、更便捷的创造出原型。

小结

ESP8266 芯片就是这样一个高性价比的 WiFi 芯片,如果你关注于物联网解决方案,可以来了解一下这个芯片。不仅连网简单,而且快速上手。你可以用 Arduino 来编程,也可以用 Lua 语言来写相关代码。

2015-11-06 00:1426896
用户头像

发布了 151 篇内容, 共 54.9 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

2022-09-04:以下go语言代码输出什么?A:不能编译;B:45;C:45.2;D:45.0。 package main import ( “fmt“ ) func main() {

福大大架构师每日一题

golang 福大大 选择题

深入学习SAP UI5框架代码系列之二:UI5 Module的懒加载机制

汪子熙

JavaScript 前端框架 SAP ui5 9月月更

用TDD开发基于数据库的长时任务系统

Bright

敏捷 DDD TDD

云资源管理概述

阿泽🧸

云资源 9月月更

一款开源的电商框架介绍:Spartacus

汪子熙

typescript angular SAP Spartacus 9月月更

C语言:位段、枚举、联合体

孤衫

后端 C语言 枚举 9月月更

「知识点」曾经忽略的arguments

叶一一

JavaScript 前端 9月月更

LeetCode-35. 搜索插入位置(java)

bug菌

9月日更 Leet Code 9月月更

Java进阶(四)Java反射TypeToken解决泛型运行时类型擦除问题

No Silver Bullet

Java 反射 9月月更 typeToken

计算机网络的组成

StackOverflow

编程 计算机网络 9月月更

如何不编写 YAML 管理 Kubernetes 应用?

北京好雨科技有限公司

设计模式的艺术 第二十五章模板方法设计模式练习(用模板方法模式开发一个数据库操作模块,用户只需将SQL语句作为参数传入模板方法,则可实现连接数据库、打开数据库、操作数据库(查询或更新)、关闭数据库等操作)

代廉洁

设计模式的艺术

「趣学前端」SVG,边学边做

叶一一

JavaScript 前端 9月月更

神级编程网站,堪称程序员的充电站,我给你找好了不能错过

C语言与CPP编程

编程 程序员 网站 计算机 编程语言‘

mysql进阶

楠羽

MySQL 笔记 9月月更

新零售SaaS架构:商品系统架构设计

AI架构师汤师爷

系统架构 SaaS 新零售

如何看待2023年秋招技术岗哀鸿遍野?

退休的汤姆

程序员 互联网 面试 社招 秋招

信息安全之我见(45/100)

hackstoic

信息安全

好代码的五个特质-CUPID

Bright

敏捷 DDD TDD

C++学习------cstdint头文件的源码学习

桑榆

c++ 源码阅读 9月月更

leetcode 148. Sort List 排序链表(中等)

okokabcd

LeetCode 算法与数据结构

你真的理解C语言中的 “ 数组 ” 吗?(初阶篇)

Albert Edison

数组 C语言 开发语言 二维数组 9月月更

浅述AIOps与DevOps的区别在哪里

穿过生命散发芬芳

DevOps AIOPS 9月月更

使用 VUE 和 Go 触摸 WebAssembly

devpoint

Go Vue webassembly 9月月更

【CSS】 position : static | absolute | relative | fixed | sticky

翼同学

CSS 前端 9月月更

容灾数据一致性保障探讨

agnostic

容灾 CAP

LeetCode-53. 最大子数组和(java)

bug菌

9月日更 Leet Code 9月月更

你猜 1 行Python代码能干什么呢?神奇的单行 Python 代码

梦想橡皮擦

Python Python. 9月月更

已献出膝盖!GitHub上的宝藏级SpringBoot核心文档,讲得太清晰了

退休的汤姆

程序员 面经 面试技巧 秋招 Java八股文

Alibaba内传(2022更新版《面试速成手册》)流出,熬夜看到176页,YYDS!

程序知音

Java 阿里 程序员面试 后端技术 Java面试八股文

ESP8266和NodeMCU:高性价比的物联网解决方案_语言 & 开发_Phodal_InfoQ精选文章