Webduino Smart 从入门到起飞,看这一篇就够了~
发表日期 : 2018/06/21  173 收藏
pATAq
向TA提问
173
总阅读量
1
作品

本文环境设备:

Windows 7 家庭高级版 64位;Linux Mint 64位;CH340串口模块;ESP8266,其实我的本职是无线透传。


他山之石

1、官方指南: 基本操作以及示例都有了,简单易学,不过一定要看繁体中文版的

2、Smart项目主页: 似乎是Smart的官方相关内容,里面还有一个bin固件


基本设置——Smart从入门到放弃
参考官方指南即可,示例挺多,蛮有意思,可以一看(注意:繁体中文教程最详尽)。因为比较简单,就不上图了,简记如下,毕竟重点不是这个。


网络设置

1、上电之后,连接到名为Smart的无线网

2、输入密码12345678以连接

3、访问192.168.4.1设置待连接的可联网的无线网络,填入账号密码以及设备名称(相当于hostname)。注意,支持隐藏SSID的无线网络

4、这时会出现一个类似于Smart_192.168.1.125的无线网络,后面的数字就是Smart的局域网IP地址

5、如果想连接新的无线网络,可以访问192.168.1.125(根据自己情况修改IP地址)重新设置网络信息。如果无法访问,则按住MicroUSB旁边的按钮上电,稍等片刻即重置网络配置


Webduino Blockly 试用
以前听过台湾哪边的Webduino以及它的Blockly,适合小学高年级以上,现在可以一睹真容了,但是一点都没有激动的感觉呢~毕竟都是基于图形化编程,不禁想起了易语言,可以进一步阅读《国内主流Arduino图形化编程软件专业评测》 。另外啃萝卜在线ArduinoIDE也不错,可以关注。

分享一个简单的demo,运行后每秒更换LED灯颜色。https://blockly.webduino.io/#-KcYRfD7bjCmJGeDMswh

注意及吐槽:
1、初始化要正确设置
2、生成分享链接可以方便地与朋友共享,类似Node-RED的功能
3、有些浏览器要允许运行脚本才能控制Smart(比如Chrome浏览器)
4、与Arduino不同,没有烧录程序功能,只能在线演示,无法离线运行,要你何用!
5、输入输出手段较少,自由度欠佳,没有Node-RED丰富和自由。限制了其应用上限
6、本身是具有无线能力,却不支持mqtt、CoAP之类的网络输入处理能力
7、需要联网才能使用该编辑器。至少应该支持无线局域网编程吧!

以上可能是我管中窥豹,没有详细试用,但是并没有详细使用这款在线编辑器的欲望。。。


搭建本地Webduino Blockly编辑器
1、官方可能意识到不能联网的无线局域网环境下使用WB不便,所以在github上可以找到该项目 ,从而可以搭建本地局域网编程环境。
2、需要安装Node.js和bower(过时了?)软件包管理工具。安装使用教程参考README.md文件,当然也可以用docker拉别人做好的镜像,不赘述。
3、拉取镜像:docker pull mingzeke/webduino-blockly,端口80。


更新固件与使用DeviceID远程控制Smart


按照官方的操作指南,YouTube视频《第一次雲端更新 + 取得 Device ID》 ,可以更新Smart的固件(从3.0.07到到3.1.0),获得DeviceID以及其他模块支持。有的DeviceID,即使不在局域网也可以远程控制Smart了。

但是!更新失败,换了各种姿势,都不行!而且很多人也更新不成!我们知道,ESP8266的GPIO0接地会进入固件更新模式,而Smart的按键是接在GPIO4上的,估计是原固件里响应了长按操作吧,不得而知。

然后我们发现,官方资料少的一笔,没有提供原厂固件下载!没有原理图!你真把自己当玩具面向小高年级学生了吗。。。


进阶使用——ESP8266从接力到起飞

ESP8266从一个无线模块到独当大任,Webduino把它给做成了一个玩具,这螺狮壳里做道场,着实不爽。跑跑官方例程,就没了。所以毅然决然放弃Smart官方固件,我们要从ESP8266搞点事情。
返璞归真:我叫ESP8266,其实我很强

根据安信可选型表 、FC图标以及开发快小e体验版图原理图隐约可见,确定Smart使用的ESP8266芯片是ESP12F,是NodeMCU 1.0所使用的ESP12E的升级版,并且Pin-to-Pin兼容,所以我们也可以很轻松的移植、使用NodeMCU的丰富资源。ESP8266 12F数据手册下载

ESP12F硬件资源:

功能特色:

*802.11 b/g/n

*内置Tensilica L106 超低功耗 32 位微型 MCU,主频支持 80 MHz 和160 MHz,支持 RTOS

*内置10 bit高精度ADC

*内置TCP/IP协议栈

*内置TR 开关、balun、LNA、功率放大器和匹配网络

  • 内置PLL、稳压器和电源管理组件,802.11b 模式下+20 dBm的输出功率
  • A-MPDU 、 A-MSDU 的聚合和 0.4 s的保护间隔
  • WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式
  • 支持AT远程升级及云端OTA升级
  • 支持 STA/AP/STA+AP 工作模式
  • 支持 Smart Config 功能(包括 Android 和 iOS 设备)
  • HSPI 、UART、I2C、I2S、IR Remote Control、PWM、GPIO
  • 深度睡眠保持电流为 10 uA,关断电流小于 5 uA
  • 2 ms 之内唤醒、连接并传递数据包
  • 待机状态消耗功率小于1.0 mW (DTIM3)
  • 供电电压 3.0v ~ 3.6v
  • 工作温度范围:-40℃- 125℃

参考12F的引脚设计图可知Smart把所有引脚都引出来了,其中左右18个引脚给用户使用,下面一排6个不知道咋么连的,有时间研究一下 (更新:最下面的6-11引脚一般用来连接flash memory chip,使用上述引脚作为IOs很可能会导致程序崩溃)。这样Smart的程序可以离线运行了。可以采用Arduino IDE、PlatformIO IDE等进行操作。


知识储备——ESP8266烧写固件


进入固件烧写模式,查找类似Smart的机智云小板和开发快体验板,找到这两篇:

《ESP8266串口烧写说明》
M302I-M小e体验版开发套件使用手册v1.1.0 —— 产品编号M302I-M

另外就是NodeMCU和安可信的wiki。想要进入固件烧写模式,需要将GPIO0接地,同时发送重置信号(RST引脚接地或者重新给板子上电)


注意:

1、请将MTDO(GPIO15)与GPIO0置于低电平,GPIO2置于高电平。如果你的模块没有MTDO,请至少将GPIO0置于低电平。GPIO0置于低电平是烧写模式,高电平是运行模式。(接地既是低电平)
2、请复位(复位是指RST低电平脉冲)或重新上电进入烧写模式。
3、请不要使用USB转TTL引出的电源,请使用独立电源。

4、烧写成功后,请重新上电。模块波特率更改为9600或115200。
5、烧写中途失败后,请重新上电烧写。


—— Via NodeMCU发起人黄锐的Notes


实际连接图,因为没带面包板,用Arduino拓展板共地。电路板上多一个按钮,类似机智云小板,按下GPIO0接地。

绘图使用Fritzing和ESP8266 part (ESP8266-12F WiFi Module.fzpz)


固件烧写工具


esptool.py (推荐)
A Python-based, open source, platform independent, utility to communicate with the ROM bootloader in Espressif ESP8266,基于Python的开源跨平台支持工具,可以操作ESP8266的固件、BootLoader
*github主页: https://github.com/espressif/esptool
*平台支持:Linux、Windows、OS X 及其他支持Python的平台
*命令行界面


ESP_DOWNLOAD_TOOL (推荐)
安可信官方wiki提供的固件烧写工具
*下载地址:http://wiki.ai-thinker.com/tools
*平台支持:Windows
*图形界面


NodeMCU Flasher 和 NodeMCU PyFlasher
支持NodeMCU的固件烧写工具,前者于2015年停止维护;后者还在由非官方维护中,基于esptool.py
*github主页:Flasher , PyFlasher
*平台支持:Windows (Flasher); ALL(PyFlasher)
*图形界面


ESP8266固件组成
参考《如何为 ESP 系列模组烧录固件》 ,可知固件有两种模式:


自制固件
不在本文的探讨范围内,可以使用官方ESP8266 SDK的docker镜像,可以免配置。


支持的IDE
1、Arduino IDE
2、platformio
3、NodeMCU IDE
这里我们准备为Smart灌入如下固件:Arduino OTA、NodeMCU、ESPuma和ESPEasy、Seeed Wio Link以及无线透传固件,基本上涵盖了所有固件类型。Let's Play!


烧录原厂固件
我们从下载官方提供的AT固件。按照文档烧录。


注意:

*12F闪存大小为4MByte (32Mbit),这里选择对应版本固件,由于提供的是合并版固件,起始地址填0x00000
*12F的SPI闪存支持QIO模式,固件的DIO是为了兼容性
*BAUD波特率可以尽量选大一些,以节省时间,若提示ERROR,请降低波特率
*GPIO0接地后重新给Smart上电,点击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 data

You 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固件

下载AT 指令调试工具

【初始化设置】选择正确的串口并打开


【GPIO设置】可以方便地读取、改变GPIO状态,进行简单操作。如图所示,板载LED灯红、绿、蓝色依次亮起熄灭。同时可以读取光敏电阻的值。



【其他常用命令】还可以设置简单的无线透传模式,STA+AP模式。可以看到,这最初的状态就是类似HLK模块,只是后来的ESP成为了开发板的核心而不仅仅是串口无线模块。



【HLK无线透传模块设置】两者最初的定位相同,只是ESP走得更远。

Arduino with Smart

主要参考这里 和 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的开发。



OTA(云端升级) 功能演示

设置好开发板(NodeMCU 1.0,选择正确的串口编号)。选择文件——示例——ArduinoOTA——BasicOTA,填写自己的无线网络名称和密码,将Smart设置为固件烧写模式,重新上电,烧录。如果之前不是AT固件则会上传报错。烧写完毕,拔掉GPIO0,重新上电,可以在串口监视器里面看到连接信息。



拔掉串口模块后重新上电,即可以通过WIFI向Smart写入新固件了。



OTA实现按键控制板载LED的功能


这是离线运行的哟!前面讲固件组成的时候,我们知道支持云端升级的固件,在 flash 中会分为 2 个区,一个用来运行程序,一个用来保存升级固件, 当运行 user1 时升级,程序会下载固件到 user2,下载完毕后,下次启动时从 user2 启动,依次替换,实现云端升级。


所以,我们新下载的固件最终会覆盖原固件,所以要在BasicOTA程序的基础上增加新功能,否则OTA功能就失效了,另外替换过程需要点时间。

代码如下(替换升级完成后蓝色LED常亮,按下板载按钮熄灭):

#include <ESP8266WiFi.h> #include <ESP8266mDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> // 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 和 makeEspArduino

PlatformIO是另一个IDE,支持非常多的开发板(AVR/STM等),即可以作为独立IDE也可以通过插件内嵌在各种流行的编辑器(例如SubLime Text)里。makeEspArduino是专为ESP优化的make。

eLUA with Smart

请参考NodeMCU相关,完全开源,移植到Smart上想必不难,因为最近没有学习LUA编程的打算,留待以后补充,不过官方示例比较友好全面。

ESPurna on Smart
ESPurna是一个开源固件,最初用于Sonoff POW,可以将ESP8266变成一个智能Node。
Sonoff POW
带电量检测功能的大功率WiFi开关。

ESPurna

项目主页:https://bitbucket.org/xoseperez/espurna

该固件用于基于ESP8266的智能开关,最初由ITead Studio开发构想,现在支持非常多的ESP8266板。它使用了Arduino Core for ESP8266框架以及很多第三方库。


功能特色:

    可通过内置异步Web服务器进行基础设置,和简单的继电器操作
    webclient可通过websockets与webserver通讯
    支持云端固件升级
    最多可支持在3个预配置的无线网络中切换,自动连接信号最强的
    支持MQTT协议
    手动设置开关状态(点击按钮)
    双击按钮可进行配置备份AP mode backup (double click the button)
    长按按钮手动重置开发板
    通过LED直观地显示连接状态
    Alexa integration (Amazon Echo or Dot) by emulating a Belkin WeMo switch
    支持自动升级(通过 NoFUSS库
    支持DHT22温湿度传感器
    支持HLW8012电力传感器(Sonoff POW上使用)
    支持电流监控through the EmonLiteESP Library 通过非侵入式传感器 (requires some hacking)
    支持串口命令行进行高级设计


编译烧录ESPurna

本文参考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 


如果编译通过,会显示如下信息:



注意:

  • ESPurna目前完整支持以下设备
  • nodemcu
  • sonoff
  • sonoff-pow
  • slampher
  • s20
  • ac
  • washer
  • studio-lamp
  • living-lamp
  • *-debug为使用串口进行烧录的固件
  • *-debug-ota为使用网络OTA升级安装的固件

为Smart烧录ESPurna固件

# 设置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文件系统

烧录完固件之后,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就化身只能无线开关啦。


试试ESPurna

断开GPIO0接地,重新给Smart上电,稍等片刻即可以搜到一个新的无线网络,连接之后,打开管理界面网址192.168.4.1,默认密码为fibonacci


ESPurna进阶功能

ESPurna仅仅是一个无线控制智能开关吗?当然不是啦,查询wiki相关页面可知,其可以通过串口命令行进行更多设置,管理GPIO接口,传输传感器数据等,完全就是一个智能家居的Node。


Wio Link OR Smart?


Wio Link是深圳Seeed Studio在KS上众筹的产品,基于ESP8266配合自家的Grove接口。话说论坛最近要开启该开发板的试用了,我们先用Smart尝尝鲜。

Wio Link的口号是"3 Steps. 5 Minutes. Build Your IoT Applications!",在KS页面上可以看到详细的介绍。

官方主页:http://iot.seeed.cc/

主要特色如下:

    No hardware programming, No breadboard, No jumper wires, No soldering required.
    A lot of Grove modules are supported (Check the list in Mobile App).
    Plug-n-Play Grove Modules
    Visual configuration instead of microcontroller programming.
    Update automatically via cloud compiling and OTA.
    Bring real world to virtual platform. All sensors become virtual RESTful API.
    Android & iOS Apps to manage Wio Link.
    IFTTT supported by Seeed’s Channel

其开放了软硬件资源,我们可以在高级用户指南 下载到原始固件。

下载user1.bin/user2.bin和esp8266sdk.zip并解压,使用ESP8266 Download Tool烧录固件。


重新上电进入运行模式后,可见红色LED常亮。基本使用请移步官方指南


引脚对应

在github项目主页可以看到引脚对应关系:



想要正常使用需要对其进行修改并创建自己的固件才能让Smart完全正常使用Wio Link的功能。


下载Wio APP
安卓可以从谷歌市场(需要代理)或者APKPure (免代理)下载Wio程序。创建账户时会根据地理位置选择合适的服务器(海外服务器被墙,国内用户会试用国内服务器)。可以手動選擇國際服務器、國內服務器和自定義服務器。


配置Smart的Wifi信息
需要按住Wio Link上的配置按钮(应该是设置Smart Wifi)的,Smart板上没有,我看了一眼,推测是GPIO16,短接GND,然后失败。官方还提供了wio-cli工具可以通过串口命令行设置Wio Link,应该可行。卡在这步了,有空折腾。


低功耗模式

参考官方文档《ESP8266 低功耗解决方案》,暂时不研究。


总结

Smart官方提供的固件无法离线运行,输入输出手段较少,目标人群是小高中生。其实使用OTA模式不断写入新固件也不错哎,为啥官方没这么做还是我不会?不得而知,毕竟官方固件被我刷掉了,而且官方也没提供备份。

Smart这么小的一个模块,没有板载USB转TTL模块,烧写固件还是有点麻烦的,加之GPIO接口较少,作为Arduino的话不如买一块UNO R3了。所以,个人感觉,烧写ESPurna作为一个智能家居Node非常不错。

综合应用 esp8266
【你的赞赏是对原创作者最大的认可】
打赏
4人已打赏
pATAq
向TA提问
173
总阅读量
1
作品
相关文章推荐
换一批
相关回答
换一批
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回