《HarmonyOS:领航者说》技术公开课来啦,大咖分享、实战解码,不容错过 了解详情
写点什么

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:1427159
用户头像

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

关注

评论

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

开发质量提升系列:问题登记列表(下)

罗小龙

生产事故 28天写作 解决思路

这是阿里技术专家对 SRE 和稳定性保障的理解

阿里巴巴云原生

项目管理 运维 云原生 安全 监控

区区一个SpringBoot问题就干趴下了?我却凭着这套“神级PDF文档”吊打面试官

Java 编程 面试 微服务

数据库恢复子系统的常见技术和方案对比(二)

星环科技

数据库 大数据

10 个 JavaScript 简洁代码小技巧(文末彩蛋)

零和幺

JavaScript 大前端 CleanCode

阿里四年技术 TL 的得失总结:如何做好技术 Team Leader

阿里巴巴云原生

云计算 项目管理 程序员 微服务 云原生

数据库恢复子系统的常见技术和方案对比(一)

星环科技

数据库 大数据

《程序员修炼之道》- 务实的哲学(3)

石云升

读书笔记 程序员 28天写作 批判性思维 完成好过完美

教你用Java字节码做点有趣的事

比伯

Java 编程 架构 程序人生 计算机

三张图解释静态NAT、动态NAT、PAT

产品训练营--第二期作业

曦语

产品训练营

30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

Java架构之路

Java 程序员 架构 面试 编程语言

“区块链新闻编辑部”: 从“云媒体”到“链媒体”的现实跨越

CECBC

区块链技术

程序员入职新公司,只需8步,直接凸显出个人价值

Java架构师迁哥

【推荐收藏!】Gradle 与 Android 构建入门

百度Geek说

研发工具 andiod

一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)

Java架构之路

Java 程序员 架构 面试 编程语言

Flink可靠性的基石-checkpoint机制详细解析

五分钟学大数据

大数据 flink

拍乐云 Flutter SDK 全新发布,跨平台音视频开发更easy

拍乐云Pano

flutter 音视频 WebRTC RTC

Elasticsearch 基于脚本进行 partial update

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

Libra演进与数字货币国际化

CECBC

区块链

Dubbo 3.0 前瞻之对接 Kubernetes 原生服务

阿里巴巴云原生

容器 运维 云原生 k8s dubbo

Flink 学习路线总结

大数据学习指南

大数据 flink

内存数据库解析与主流产品对比(三)

星环科技

数据库 大数据

智能汽车为什么新势力有胜算(28天写作 Day20/28)

mtfelix

28天写作 新能源汽车 智能汽车 造车新势力

5年Java经验不会源码被拒,苦学这些Spring源码笔记后,面试不再慌

Java架构之路

Java 程序员 架构 面试 编程语言

KubeVela:标准化的云原生平台构建引擎

阿里巴巴云原生

容器 云原生 k8s API OAM

nodejs的调试debug

程序那些事

debug 调试 nodejs 程序那些事 程序调试

译文《最常见的10种Java异常问题》

潘大壮

Java 异常 java异常处理 Exception

kotlin高阶函数let、with、apply、run、also使用场景

陈吉米

kotlin

抽奖助手利益相关方

千竹

新思科技发布《美国不良软件质量成本:2020年报告》

InfoQ_434670063458

软件质量 新思科技

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