原创文章,转载引用务必注明链接。水平有限,如有疏漏,欢迎指正。
试用了一下,感觉这板子+WebduinoBlockly在线开发环境,下限低、上限也低,以后肯定要刷其他固件的。举个简单的例子,WBlockly的输入输出手段较少,控件自由度欠佳,真的就把Smart当做玩具了。
本文使用Markdown写成,为获得更好的阅读体验和正常的图片、链接,请访问我的博客原文:
http://www.cnblogs.com/sjqlwy/p/smart_all_in_1.html
大水怪来了~因为社区会记录试用报告发帖数量,为了获得连贯的阅读体验,建议阅读此文。虽然有点繁琐,但是这也意味着社区试用制度越来越完善。
本文环境设备:
Windows 7 家庭高级版 64位;Linux Mint 64位;CH340串口模块
;ESP8266,其实我的本职是无线透传
推荐看安可信和NodeMCU的WIKI
安信可ESP8266交流群-1: 120693138 群共享文件里面有不少有用的东西
参考官方指南即可,示例挺多,蛮有意思,可以一看(注意:繁体中文教程最详尽)。因为比较简单,就不上图了,简记如下,毕竟重点不是这个。
Smart
的无线网12345678
以连接192.168.4.1
设置待连接的可联网的无线网络,填入账号密码以及设备名称(相当于hostname)。注意,支持隐藏SSID的无线网络Smart_192.168.1.125
的无线网络,后面的数字就是Smart的局域网IP地址192.168.1.125
(根据自己情况修改IP地址)重新设置网络信息。如果无法访问,则按住MicroUSB旁边的按钮上电,稍等片刻即重置网络配置以前听过台湾哪边的Webduino以及它的Blockly,适合小学高年级以上 ,现在可以一睹真容了,但是一点都没有激动的感觉呢~毕竟都是基于图形化编程,不禁想起了易语言,可以进一步阅读《国内主流Arduino图形化编程软件专业评测》 。另外啃萝卜在线ArduinoIDE也不错,可以关注。
分享一个简单的demo,运行后每秒更换LED灯颜色。
https://blockly.webduino.io/#-KcYRfD7bjCmJGeDMswh
注意及吐槽:
以上可能是我管中窥豹,没有详细试用,但是并没有详细使用这款在线编辑器的欲望。。。
官方可能意识到不能联网的无线局域网环境下使用WB不便,所以在github上可以找到该项目 ,从而可以搭建本地局域网编程环境。
需要安装Node.js和bower(过时了?)软件包管理工具。安装使用教程参考README.md文件,当然也可以用docker拉别人做好的镜像,不赘述。
docker基本使用及更改镜像源加速下载请看我的博客 UP の Docker之旅
拉取镜像:docker pull mingzeke/webduino-blockly
,端口80。
按照官方的操作指南,YouTube视频《第一次雲端更新 + 取得 Device ID》 ,可以更新Smart的固件(从3.0.07到到3.1.0),获得DeviceID以及其他模块支持。有的DeviceID,即使不在局域网也可以远程控制Smart了。
但是!更新失败,换了各种姿势,都不行!而且很多人也更新不成!我们知道,ESP8266的GPIO0接地会进入固件更新模式,而Smart的按键是接在GPIO4上的,估计是原固件里响应了长按操作吧,不得而知。
然后我们发现,官方资料少的一笔,没有提供原厂固件下载!没有原理图!你真把自己当玩具面向小高年级学生了吗。。。
ESP8266从一个无线模块到独当大任,Webduino把它给做成了一个玩具,这螺狮壳里做道场,着实不爽。跑跑官方例程,就没了。所以毅然决然放弃Smart官方固件,我们要从ESP8266搞点事情。
根据安信可选型表 、FC图标以及开发快小e体验版图原理图隐约可见,确定Smart使用的ESP8266芯片是ESP12F ,是NodeMCU 1.0所使用的ESP12E的升级版,并且Pin-to-Pin兼容,所以我们也可以很轻松的移植、使用NodeMCU的丰富资源。ESP8266 12F数据手册下载
ESP12F硬件资源:
功能特色:
参考12F的引脚设计图可知Smart把所有引脚都引出来了,其中左右18个引脚给用户使用,下面一排6个不知道咋么连的,有时间研究一下 (更新:最下面的6-11引脚一般用来连接flash memory chip,使用上述引脚作为IOs很可能会导致程序崩溃)。
下文我们将使用Arduino或LUA编程语言来为Smart写程序,以及使用第三方固件实现智能无线Node的功能。
这样Smart的程序可以离线运行了。可以采用Arduino IDE、PlatformIO IDE等进行操作。
查找类似Smart的机智云小板和开发快体验板,找到这两篇:
另外就是NodeMCU和安可信的wiki。想要进入固件烧写模式,需要将GPIO0接地,同时发送重置信号(RST引脚接地或者重新给板子上电)
注意:
请将MTDO(GPIO15)与GPIO0置于低电平,GPIO2置于高电平。如果你的模块没有MTDO,请至少将GPIO0置于低电平。GPIO0置于低电平是烧写模式,高电平是运行模式。(接地既是低电平)
烧写中途失败后,请重新上电烧写。
—— Via NodeMCU发起人黄锐的Notes
实际连接图,因为没带面包板,用Arduino拓展板共地。电路板上多一个按钮,类似机智云小板,按下GPIO0接地。
绘图使用Fritzing和ESP8266 part (ESP8266-12F WiFi Module.fzpz)
A Python-based, open source, platform independent, utility to communicate with the ROM bootloader in Espressif ESP8266.
基于Python的开源跨平台支持工具,可以操作ESP8266的固件、BootLoader
安可信官方wiki提供的固件烧写工具
支持NodeMCU的固件烧写工具,前者于2015年停止维护;后者还在由非官方维护中,基于esptool.py
参考《如何为 ESP 系列模组烧录固件》 ,可知固件有两种模式:
也就是是否支持OTA,对于Smart原厂固件应该是NoBoot模式,而Wio Link、ESPDino、NodeMCU这种是Boot模式。
支持云端升级的固件,在 flash 中会分为 2 个区,一个用来运行程序,一个用来保存升级固件, 当运行 user1 时升级,程序会下载固件到 user2,下载完毕后,下次启动时从 user2 启动,依次替换,实现云端升级。
不在本文的探讨范围内,可以使用官方ESP8266 SDK的docker镜像,可以免配置。
安可信原厂固件可以在此下载,此外你也可以使用开发快的固件。这里我们准备为Smart灌入如下固件:Arduino OTA、NodeMCU、ESPuma和ESPEasy、Seeed Wio Link以及无线透传固件,基本上涵盖了所有固件类型。Let's Play!
我们从这里下载官方提供的AT固件(更新时间:2016年12月02日)。按照文档烧录。
注意:
START
可以看到等待上电同步
——>下载中
——>完成
下载完成后,断开GPIO0接地,重新上电,没多久可以看到绿色LED常亮,并能搜索到AI-THINKER_XXXXX
的无线网络。
QIO和DIO的区别
Quad IO uses 4 lines for data for up to 4 times the speed of standard.
Dual IO uses 2 lines for data
Standard uses a single line for dataYou need to use the mode that the flash part supports. The datasheet for the part should describe the modes that it supports. The HW design also has to have the lines connected. - See more at: http://www.esp8266.com/viewtopic.php?f=33&t=3838
下载AT 指令调试工具
【初始化设置】选择正确的串口并打开
【GPIO设置】可以方便地读取、改变GPIO状态,进行简单操作。如图所示,板载LED灯红、绿、蓝色依次亮起熄灭。同时可以读取光敏电阻的值。
【其他常用命令】还可以设置简单的无线透传模式,STA+AP模式。可以看到,这最初的状态就是类似HLK模块,只是后来的ESP成为了开发板的核心而不仅仅是串口无线模块。
【HLK无线透传模块设置】两者最初的定位相同,只是ESP走得更远。
主要参考这里 和 ESPDuino ,选择NodeMCU 1.0(12F是NodeMCU使用的12E的升级版,引脚完全兼容)。
12f 和 12e 有什么区别: 12f 是四层板,12e 是两层板。还有就是天线的区别。建议用 12f。
注意!切换固件时请先刷回官方AT固件,否则会出错!
关于Arduino Core for ESP8266的更多使用方法务必参考官方文档 。我们使用官方Arduino IDE(当前最新版本1.81),安装完毕并启动后,选择文件
——首选项
,添加http://arduino.esp8266.com/stable/package_esp8266com_index.json
并保存。
然后打开工具
——开发板管理器
——类型
选择贡献,找到esp8266并安装。此种方法我的网络需要挂http代理(socks代理不行),或者参考上述页面从github上下载安装。
安装完毕后即可支持ESP的开发。
设置好开发板(NodeMCU 1.0,选择正确的串口编号)。选择文件——示例——ArduinoOTA——BasicOTA,填写自己的无线网络名称和密码,将Smart设置为固件烧写模式,重新上电,烧录。如果之前不是AT固件则会上传报错。烧写完毕,拔掉GPIO0,重新上电,可以在串口监视器里面看到连接信息。
拔掉串口模块后重新上电,即可以通过WIFI向Smart写入新固件了。
这是离线运行的哟!前面讲固件组成的时候,我们知道支持云端升级的固件,在 flash 中会分为 2 个区,一个用来运行程序,一个用来保存升级固件, 当运行 user1 时升级,程序会下载固件到 user2,下载完毕后,下次启动时从 user2 启动,依次替换,实现云端升级。
所以,我们新下载的固件最终会覆盖原固件,所以要在BasicOTA程序的基础上增加新功能,否则OTA功能就失效了,另外替换过程需要点时间。
代码如下(替换升级完成后蓝色LED常亮,按下板载按钮熄灭):
#include
#include
#include
#include
// constants won’t change.
const char* ssid = “无线网络名称”;
const char* password = “无线网络密码”;
const int buttonPin = 4; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin(蓝色LED)
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
Serial.begin(115200);
Serial.println(“Booting”);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println(“Connection Failed! Rebooting…”);
delay(5000);
ESP.restart();
}
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname(“myesp8266”);
// No authentication by default
// ArduinoOTA.setPassword((const char *)“123”);
ArduinoOTA.onStart( {
Serial.println(“Start”);
});
ArduinoOTA.onEnd( {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf(“Progress: %u%%\r”, (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println(“Auth Failed”);
else if (error == OTA_BEGIN_ERROR) Serial.println(“Begin Failed”);
else if (error == OTA_CONNECT_ERROR) Serial.println(“Connect Failed”);
else if (error == OTA_RECEIVE_ERROR) Serial.println(“Receive Failed”);
else if (error == OTA_END_ERROR) Serial.println(“End Failed”);
});
ArduinoOTA.begin();
Serial.println(“Ready”);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
ArduinoOTA.handle();
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
PlatformIO是另一个IDE,支持非常多的开发板(AVR/STM等),即可以作为独立IDE也可以通过插件内嵌在各种流行的编辑器(例如SubLime Text)里。makeEspArduino是专为ESP优化的make。
请参考NodeMCU相关,完全开源,移植到Smart上想必不难,因为最近没有学习LUA编程的打算,留待以后补充,不过官方示例比较友好全面。
ESPurna是一个开源固件,最初用于Sonoff POW,可以将ESP8266变成一个智能Node。
带电量检测功能的大功率WiFi开关。
产品主页:http://sonoff.itead.cc/cn/products/sonoff/sonoff-pow 或者https://www.itead.cc/sonoff-pow.html
项目主页:https://bitbucket.org/xoseperez/espurna
该固件用于基于ESP8266的智能开关,最初由ITead Studio开发构想,现在支持非常多的ESP8266板。它使用了Arduino Core for ESP8266框架以及很多第三方库。
功能特色:
本文参考cnx-software博客 ,在此感谢。你可以使用Arduino IDE烧录该固件,但是这里我们使用PlatformIO进行演示。环境:Linux Mint x64。
# 使用git下载espurna源码
sudo apt install git
git clone https://bitbucket.org/xoseperez/espurna
cd espurna/code
# 你可以安装图形界面版的platformio-ide,这里使用命令行界面的
sudo apt install python-pip
sudo pip install --upgrade pip
sudo pip install -U https://github.com/platformio/platformio/archive/develop.zip
platformio platform install https://github.com/platformio/platform-espressif8266.git#feature/stage
# 使用以下命令检查编译环境如果通过会自动编译支持NodeMCU开发板的固件(12E)
pio run -e node-debug
如果编译通过,会显示如下信息:
Linking .pioenvs/node-debug/firmware.elf
Calculating size .pioenvs/node-debug/firmware.elf
text data bss dec hex filename
377725 12108 31520 421353 66de9 .pioenvs/node-debug/firmware.elf
Building .pioenvs/node-debug/firmware.bin
========================= [SUCCESS] Took 91.20 seconds =========================
================================== [SUMMARY] ==================================
Environment node-debug [SUCCESS]
Environment node-debug-ota [SKIP]
Environment sonoff-debug [SKIP]
Environment sonoff-debug-ota [SKIP]
Environment sonoff-pow-debug [SKIP]
Environment sonoff-pow-debug-ota [SKIP]
Environment slampher-debug [SKIP]
Environment slampher-debug-ota [SKIP]
Environment s20-debug [SKIP]
Environment s20-debug-ota [SKIP]
Environment ac-device [SKIP]
Environment washer-device [SKIP]
Environment studio-lamp-device [SKIP]
Environment living-lamp-device [SKIP]
========================= [SUCCESS] Took 91.21 seconds =========================
注意:
# 设置udev规则以允许串口烧录固件
sudo wget https://raw.githubusercontent.com/platformio/platformio/develop/scripts/99-platformio-udev.rules -O /etc/udev/rules.d/99-platformio-udev.rules
sudo service udev restart
# 插上串口模块,Smart的GPIO0接地后上电,运行以下命令烧录固件
pio run -t upload -e node-debug
# 上述命令等同于下列命令,注意修改固件位置和串口设备名称
esptool -vv -cd ck -cb 115200 -cp "/dev/ttyUSB0" -cf .pioenvs/node-debug/firmware.bin
烧录完固件之后,ESPurna并不能正确运行,因为webserver相关文件储存在另一个分区,并且压缩为一个index.html.gz的独立文件,我们还要为它创建文件系统才能使用。
# 安装Node.js和gulp包管理系统,使用淘宝源加速下载
sudo apt install npm nodejs nodejs-legacy
sudo npm --registry=https://registry.npm.taobao.org install npm@latest -g
sudo npm install --registry=https://registry.npm.taobao.org --global gulp-cli
# 在espurna/code文件夹执行以下命令
npm install --registry=https://registry.npm.taobao.org
gulp
# 等待编译完成,上传新的文件系统
pio run -t uploadfs -e node-debug
执行完以上步骤,Smart就化身只能无线开关啦。
断开GPIO0接地,重新给Smart上电,稍等片刻即可以搜到一个新的无线网络,连接之后,打开管理界面网址192.168.4.1
,默认密码为fibonacci
ESPurna仅仅是一个无线控制智能开关吗?当然不是啦,查询wiki相关页面可知,其可以通过串口命令行进行更多设置,管理GPIO接口,传输传感器数据等,完全就是一个智能家居的Node。
commands
*21
+COMMANDS
+PUBLISH
+SUBSCRIBE
+UNSUBSCRIBE
+DICTIONARIES
+GET
+SET
+DEL
+KEYS
+SELECT
+HARDWARE
+READ
+WRITE
+RECONNECT
+RESET
+SAVE
+BOARD
+BOARDS
+EEPROM.DUMP
+EEPROM.ERASE
+SETTINGS.SIZE
类似的还有ESPEasy固件,不在赘述,可以参考玩转Domoticz平台——配合ESPEasy固件 。
Wio Link是深圳Seeed Studio在KS上众筹的产品,基于ESP8266配合自家的Grove接口。话说论坛最近要开启该开发板的试用了,我们先用Smart尝尝鲜。
Wio Link的口号是"3 Steps. 5 Minutes. Build Your IoT Applications!",在KS页面上可以看到详细的介绍。
官方主页:http://iot.seeed.cc/
主要特色如下:
其开放了软硬件资源,我们可以在高级用户指南 下载到原始固件。
下载user1.bin/user2.bin和esp8266sdk.zip并解压,使用ESP8266 Download Tool烧录固件。
重新上电进入运行模式后,可见红色LED常亮。基本使用请移步官方指南
在github项目主页可以看到引脚对应关系:
{
"board_name": "Wio Link v1.0",
"board_vendor": "seeedstudio",
"board_flash_map": 6,
"board_flash_spi_speed": 40,
"board_flash_spi_mode": "QIO",
"board_builtin":
{
"FUNCTION_KEY": 0,
"STATUS_LED": 2,
"GROVE_POWER_SWITCH": 15
},
"interfaces":
{
"D0": { "type": "GPIO", "pin": 14 },
"D1": { "type": "GPIO", "pin": 12 },
"D2": { "type": "GPIO", "pin": 13 },
"A0": { "type": "ANALOG", "pin": 17 },
"I2C0": { "type": "I2C", "pinsda": 4, "pinscl": 5 },
"UART0": { "type": "UART", "pintx": 1, "pinrx": 3 }
}
}
想要正常使用需要对其进行修改并创建自己的固件才能让Smart完全正常使用Wio Link的功能。
安卓可以从谷歌市场(需要代理)或者APKPure (免代理)下载Wio程序。创建账户时会根据地理位置选择合适的服务器(海外服务器被墙,国内用户会试用国内服务器)。可以手動選擇國際服務器、國內服務器和自定義服務器。
需要按住Wio Link上的配置按钮(应该是设置Smart Wifi)的,Smart板上没有,我看了一眼,推测是GPIO16,短接GND,然后失败。官方还提供了wio-cli工具可以通过串口命令行设置Wio Link,应该可行。卡在这步了,有空折腾。
可以去github上搜索esp8266按star排序:
参考官方文档《ESP8266 低功耗解决方案》,暂时不研究。
Smart官方提供的固件无法离线运行,输入输出手段较少,目标人群是小高中生。其实使用OTA模式不断写入新固件也不错哎,为啥官方没这么做还是我不会?不得而知,毕竟官方固件被我刷掉了,而且官方也没提供备份。
Smart这么小的一个模块,没有板载USB转TTL模块,烧写固件还是有点麻烦的,加之GPIO接口较少,作为Arduino的话不如买一块UNO R3了。所以,个人感觉,烧写ESPurna作为一个智能家居Node非常不错。
原文译自Transform Your ESP8266 Board into a USB to Serial Board Easily with Arduino Serial Bypass Sketch。
日常都会用到USB转串口模块,用来调试、登录以及为各种开发板上传程序。虽然这个模块并不贵,但是有时候手头木有咋么办?如果你手头有一块Arduino兼容板,那问题就迎刃而解了,借助ArduinoSerialBypass.ino小程序,可以很方便地将Arduino兼容板变成一个USB2TTL调试模块使用,而现在,网友Zoobab发现,这同样适用于烧录了Arduino固件的ESP8266。
【Wemos D1 Mini】国产的小板子,产品介绍见此,板载CH340G串口模块,兼容Arduino和NodeMCU。
让我们看看这个神奇的小程序是什么:
void setup()
{
pinMode(0,INPUT);
pinMode(1,INPUT);
}
void loop()
{
}
啊哈,两行不能再简单的代码,实现了Tx和Rx引脚(0和1)设置为输入以确保串行连接不会受到干扰,详细解释如下:
This code makes the Arduino not interfere with pins 0 and 1 which are connected to RX and TX on the FTDI chip. This allows the data coming from the FTDI USB 2 Serial chip to flow directly to another device. Since RX and TX are labeled from the Arduino’s point of view, don’t cross the wires, but plug the device’s RX wire into the RX pin 0 and the TX wire into the TX pin 0.
使板载USB转串口模块(FTDI/CH340G/PL2303/Atmega)的数据直接流转到其他设备,也因此Rx-Rx,Tx-Tx连接,无需像往常那样交叉连接。
上述方案适用于板载有USB2TTL模块的Arduino兼容板,并且也适用于使用ESP8266方案的Wemos D1 Mini(烧录Arduino固件),注意,标准Arduino使用5v电平,ESP8266使用3.3v电平。
如果想要使用wifi转串口功能,则可以借助 ESPLink 固件,缺点是无法像Arduino固件那样还能同时使用其他引脚。当然由于ESPLink固件是开源的,你可以进行二次开发。
PS:建议访问原文以查看更多精彩评论;ZooBaB好像是个大触啊!