写点什么

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

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

关注

评论

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

车内语音识别数据:驾驶体验升级与智能出行的未来

来自四九城儿

openGauss数据库源码解析系列文章——AI技术(2.2)

daydayup

一文带你全面理解向量数据库

树上有只程序猿

数据库 向量数据库

如何配置 Sublime Text4为 C++ 编辑器

芯动大师

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

鳄鱼视界

JavaScript入门基础

timerring

JavaScript

3DCAT实时云渲染助力VR虚拟现实迈向成熟

3DCAT实时渲染

实时渲染云 VR虚拟现实

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

威廉META

精益思维在项目管理中的应用

乐思项目管理

项目管理 精益

自然对话语音开启人机交互的未来之窗

来自四九城儿

openGauss数据库源码解析系列文章——AI技术(2.1)

daydayup

2023网络与边缘产业高层峰会拉开帷幕,英特尔联合生态伙伴以创新技术破局数智化转型挑战

E科讯

Go 语言 select 都能做什么?

AlwaysBeta

Go golang 面试 select

想学Python高级编程?这个技巧你不能错过!

程序员晚枫

Python 高级编程

openGauss正式推出资源池化架构,全新升级社区工具DataKit

daydayup

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

股市老人

Linux 防火墙配置(iptables和firewalld)详细教程。

百度搜索:蓝易云

云计算 Linux 运维 Firewalld iptables

Linux系统修改ssh端口教程。

百度搜索:蓝易云

云计算 Linux 运维 SSH 云服务器

javascript数据类型详解

timerring

JavaScript

全球掀复现「室温常压超导体」热潮,中国队已肝十几小时,韩国团队却内讧了

Openlab_cosmoplat

人工智能

腾讯云 CODING × K+ 峰会再次携手开启软件行业新风向

CODING DevOps

AJAX - 创建 XMLHttpRequest 对象

雪奈椰子

浅析嵌入式GUI框架-LVGL

巫山老妖

嵌入式开发 LVGL FrameBuffer

文心一言 VS 讯飞星火 VS chatgpt (67)-- 算法导论6.5 6题

福大大架构师每日一题

福大大架构师每日一题

自然对话语音数据:人机交互的新纪元与挑战

来自四九城儿

iOS 应用上架的步骤和工具简介

雪奈椰子

如何进行高效的代码审查

小万哥

程序员 程序人生 后端 软件开发 代码审查

搜狐科技专访 | 澜舟科技CEO周明:不过度追求AGI,更看重大模型语言理解能力和应用落地性

澜舟孟子开源社区

数据驱动的项目管理:未来趋势

乐思项目管理

#数据分析 #项目管理

Linux系统Redis性能优化详细教程。

百度搜索:蓝易云

redis 云计算 Linux 运维 云服务器

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