本文原文发表在《无线电》上,感谢fm老师提供开发板和指导
LinkNode D1 简介
LinkNode D1是LinkSprite公司出品的一款Arduino兼容的WiFi开发板。ESP-8266EX 使用 Tensilica L106 32 bit 为MCU,这款MCU主要特点有:
- 支持802.11 b/g/n标准
- 支持WPA/WPA2
- 支持STA/AP/STA+AP 三种工作模式
- 唤醒到开始传输数据时间小于2 ms
- 待机功率小于1.0 mW
这些特性使得LinkNode D1可以以低功耗模式、在多种WiFi环境下运行。此外,LinkNode D1的开发板还在此基础上扩展了以下功能:
- 11个数字IO口
- 1个模拟输入口
- 1个Micro USB口用于供电和UART数据传输
- 1个9~24V供电口
- 4M Flash
- 80K 内存
这使得LinkNode D1可以连接更多的传感器等元件,也可以支持更复杂的代码。
LinkNode D1的串口转USB使用的是CH340,它提供了Windows、Mac和Linux的驱动,使得这款LinkNode D1可以在多平台上进行开发。
使用Arduino模式开发
LinkNode D1在Arduino Studio的库比较完善,环境配置也比较简单,适合刚开始接触LinkNode D1的用户快速熟悉其特性或开始工程。使用Arduino Studio进行开发的方式如下。
Arduino Studio开发环境搭建
首先下载并安装Arduino Studio,运行程序。在“文件”菜单中打开首选项。如下图所示,在“附加开发版管理器网址”一栏里添加如下网址以获得ESP-8266EX的有关参数:http://arduino.esp8266.com/stable/package_esp8266com_index.json
。如果已经添加过其他网址,用逗号隔开多个网址。
保存后打开“工具”->”开发板”->“开发板管理器”,在弹出的开发板管理器窗口里搜索“esp8266”,选择一个版本进行安装。
安装完开发板信息后,再打开“项目”->“加载库”->“管理库”,在库管理器窗口里搜索“wifimanager”,点击安装。
最后在“工具”菜单里选择开发板为“WeMos D1 (Retired)”,CPU Frequency为80 MHz,Flash Size为“4M (3M SPIFFS)”,Upload Speed为921600,并选择对应的串口。至此,开发环境配置完成。
编写烧录程序
在不外接扩展设备的情况下,LinkNode D1与用户的主要交互手段有两个,一是ESP-8266芯片上的LED灯,二是串口。接下来先写一个最简单的程序,实现LED灯闪烁和串口发送“Hello, World!”。
1 | void setup() { |
点击Arduino Studio上的上传按钮将文件上传到开发板上。之后打开“工具”->“串口监视器”,在右下角将波特率设置为115200。可以看到,开发板上的灯开始闪烁,并能在串口监视器中看到“Hello, World!”。
使用WiFi Manager连接到路由器
ESP-8266EX提供的WiFi Manager库可以使芯片很容易通过无线AP接入互联网。因为其支持AP模式和SAT模式,所以思路是先让LinkNode作为无线AP,待其他移动设备连接到无线AP后,通过LinkNode的管理页面选择SSID并输入密码,最后LinkNode再以STA模式接入选定的无线AP,从而连入互联网。
在Arduino Studio中修改代码如下:
1 |
|
点击上传后,使用手机搜索WiFi,可以看到LinkNodeAP的SSID。连接并进入配置界面http://10.0.1.1/
,如图所示:
点击Configure WiFi,LinkNode会搜索附近的WiFi,同时在串口和手机网页输出AP信息。输入SSID和密码接入网络,这些信息会被存储,除非在代码里调用用wifiManager.resetSettings() 清除配置。
接入网络后,串口监视器里也可以看到提示。
使用NodeMCU模式开发
NodeMCU使用脚本语言Lua为ESP8266直接编写固件,由于其轻量、接口封装好等特点受到开发者很大欢迎。这款LinkNode D1也支持使用NodeMCU直接向ESP8266刷写程序。使用NodeMCU的方式如下。
刷写
首先使用NodeMCU Flasher刷写,波特率设置为9600(可以修改为别的速率)。然后选择端口,点击刷写。在9600的速度下刷写过程需要大约5分钟,耐心等待完成。
上传程序
NodeMCU有多种方式上传程序,这里选用使用Java编写,支持跨多平台的ESPlorer。
- 将LinkNode D1连接到电脑上并运行ESPlorer.jar
- 在ESPlorer右侧点击刷新按钮,选择LinkNode D1对应的串口号,点击Open打开串口。如果此时Open状态灯为红色,按下LinkNode D1上的reset按钮,状态灯转绿后可以继续操作
- 新建一个init.lua,使ESP8266上的LED常亮,代码如下所示
1
2
3
4
5-- init.lua
pin = 4
gpio.mode(pin, gpio.OUTPUT)
gpio.write(pin, gpio.LOW)
print(gpio.read(pin)) - 点击左下角的Save to ESP,等待上传完成后可以看到,LED灯被点亮
连接到路由器
修改init.lua,输入如下内容。设置WiFi模式为STATION。输入所在环境下无线路由器的SSID和密码,连接到路由器上。
1 | function startup() |
点击Save to ESP,等待文件上传完成。Init.lua会在启动时被自动加载运行。这时可以看到,LinkNode已经连接到了无线路由器上,并取得了IP地址。
此时重新刷写其他程序不会影响WiFi连接。
使用LinkSprite IO云平台
LinkSpritIO 是LinkSprite公司开发的云平台,支持RESTful API和WebSocket,可以实现网页/桌面/移动端对LinkNode等IoT设备的控制和信息交互。
在LinkSpritIO中,所有数据包都以JSON格式存储,通过HTTP传输。其提供了两套API,分别供IoT设备和其他设备使用,所有API都支持Update和Query操作。用户除了使用API,也可以在LinkSprite IO的网页上直接对数据进行查询和修改。
LinkSprite IO的使用非常简便。先在其网站注册账号,注册后点击“My Profile”,可以看到一个API Key。再点击“My Device”,选择“Create New Device”,“Device Type”选择“Simple Light“,之后可以看到一个Device ID。API Key和Device ID是区别不同设备的重要标识。
到这里,LinkSPrite IO上的工程就建立完成了,接下来编写LinkNode D1上的程序。以Arduino Studio开发模式为例,使用刚刚已经连接到互联网上的开发版,修改代码如下:
1 |
|
这段程序里构造了HTTP请求并以POST方式发送给LinkSprite IO,同时接受返回的信息。如果使用NodeMCU模式开发,则使用conn模块发送HTTP请求,同理可以达到这一效果。
上传到开发板后,在LinkSprite IO的页面里点击Light On或Light Off并点击Save,这个Device里的json的值会发生变化。LinkNode D1通过网络读取到json的变化,并据此改变LED等的状态。
有了API Key和Device ID,用户也可以在其他程序中通过发送HTTP请求来完成对LinkNode设备的控制。通过支持LinkSprite API的Gateway,还可以将应用范围扩展到Bluetooth、ZigBee等其他设备上。
软文总结部分就不发啦,想看原文可以去买杂志~
以及截止本文测试的时候,CH340仍然 没有 一个Apple官方支持的驱动,如果直接安装其官网提供的mac驱动并连上USB就会报kernel panic,导致系统重置,需要小心。建议最好在Windows平台下使用该开发板。