序号 | SDK版本 | 内容 | 链接 |
---|---|---|---|
1 | nonos2.0 | 搭建开发环境,开始一个“hellow world”串口打印。 | 点我访问 |
2 | nonos2.0 | 利用GPIO开始使用按钮点亮你的“第一盏灯。 | 点我访问 |
3 | nonos2.0 | 利用 "软件定时器 " 定时0.5秒闪烁点亮一盏LED。 | 点我访问 |
4 | nonos2.0 | 用PWM控制一盏LED的亮度变化。 | 点我访问 |
5 | nonos2.0 | SDK高级使用之封装Post与Get请求云端,拿到“天气预报信息”。 | 点我访问 |
6 | nonos2.0 | 了解 SmartConfig与Airkiss一键配网,给8266配网上云端。无需把wifi名字密码写在固件里。 | 点我访问 |
7 | nonos2.0 | 了解 softAP热点配网模式原理,仿“机智云”定义自己的热点配网模式协议。 | 点我访问 |
8 | nonos2.0 | 你要找的8266作为UDP、TCP客户端或服务端的角色通讯,都在这了。 | 点我访问 |
9 | nonos2.0 | [小实战上篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。 | 点我访问 |
10 | nonos2.0 | [小实战下篇]Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。 | 点我访问 |
11 | rtos2.0 | 接入阿里智能,点亮一盏LED灯,期待天猫精灵语音控制的不约而至! | 点我访问 |
12 | nonos2.0 | 图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏LED。 | 点我访问 |
13 | nonos2.0 | 动手做个8266毕设小案例,smartConfig + MQTT协议轻松实现远程控制一盏LED。 | 点我访问 |
14 | rtos2.0 | FreeRtos系统学习的正确姿势 ------ 环境搭建、烧录。 | 点我访问 |
15 | rtos2.0 | 接入阿里云平台非阿里智能的SDS服务,点亮一盏LED灯。 | 点我访问 |
16 | nonos2.0 | 基于Nonos移植红外线H1838,实现红外遥控器配网,远程控制一盏灯。 | 点我访问 |
17 | nonos2.0 | esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。 | 点我访问 |
18 | nonos2.0 | 基于NONOS 实现 OTA 远程升级,实现无线“ 热修复 ”升级固件程序。 | 点我访问 |
19 | nonos2.0 | 驱动 ds18b20、dht11 温湿度传感器,采集温湿度传感器到服务器。 | 点我访问 |
20 | nonos2.0 | 深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。 | 点我访问 |
21 | nonos2.0 | 浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。 | 点我访问 |
22 | nonos2.0 | esp8266的工程如何添加第三方静态库文件以及如何自定义文件夹,聊聊那些makeFile的事 | 点我访问 |
23 | nonos2.0 | 再来一波 esp8266 基于 freeRtos系统连接自己私有的服务器实现OTA远程升级,接触下 lwip的基本知识。 | 点我访问 |
24 | nonos2.0 | 渗透学习回顾下esp8266的外置spi芯片25q系列,熟悉8266代码块在其的分布,得心应手放置图片或其他资料。 | 点我访问 |
25 | rtos2.0 | 深聊下esp8266的串口 Uart 通讯中断编程,为您准备好了 NONOS 版本 和 RTOS 系统的串口驱动文件。 | 点我访问 |
26 | nonos2.0 | RTOS分析 MQTT 实现过程,实现移植 MQTT协议在 esp8266 rtos实时系统,可断线重连。 | 点我访问 |
27 | rtos3.0 | 跟紧脚步,用VisualStudio Code开发 esp8266 rtos SDK v3.0版本,全新的 idf 框架,节省内存模块化开发。 | 点我访问 |
28 | rtos3.0 | 教你轻松自如使用cJson在乐鑫 esp8266 如何解析一段json数据以及如何生成一段json数据。 | 点我访问 |
29 | rtos3.0 | 百万条消息免费之使用TCP直连模式MQTT协议接入阿里云物联网平台,支持私家服务器对接支持阿里云规则引擎。 | 点我访问 |
30 | rtos3.0 | SDK编程使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。 | 点我访问 |
31 | rtos3.0 | 当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,实现无需路由器手机也可以控制esp8266。 | 点我访问 |
32 | rtos3.0 | 细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。 | 点我访问 |
33 | rtos3.0 | 如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用? | 点我访问 |
34 | nonos3.0 | 编程使用 SPI 驱动基于Max7219芯片的八位数码管,显示日期信息。 | 点我访问 |
35 | nonos3.0 | 借助机智云平台做一个商业化的七彩RGB灯泡可调整体方案项目,炫彩夺目高大尚。 | 点我访问 |
36 | rtos3.0 | 认识Rtos 3.0 sdk 工程结构,如何向esp-idf工程靠近的,如何自定义头文件编译? | 点我访问 |
37 | rtos3.0 | 你要找的基本外设功能都在这里了,包括Gpio、Pwm 和 Uart 接口使用。 | 点我访问 |
38 | rtos3.0 | 一篇文章带你搞掂存储技术 NVS 的认识和使用,如何利用NVS保存整型、字符串、数组以及结构体。 | 点我访问 |
39 | rtos3.0 | 带你捋一捋市面上的微信公众号配网智能设备 esp8266 并绑定设备的过程,移植并成功实现在 esp8266 rtos3.1 sdk。 | 点我访问 |
40 | rtos3.0 | 基于乐鑫idf框架,研究出超稳定、掉线重连、解决内存泄露问题的Mqtt框架!支持esp8266和esp32! | 点我访问 |
41 | rtos3.0 | esp8266-12模块基于rtos3.1版本ota功能远程空中升级固件,官网基础之上增加dns域名解析! | 点我访问 |
42 | rtos3.0 | 我又来了,基于rtos3.0版本 SDK编程 SPI 驱动 ws2812b 七彩灯,代码全部开源奉献给你们! | 点我访问 |
43 | rtos3.0 | 基于rtos3.0版本扫描周围获取附近可用的 Wi-Fi 热点路由器信息,同样适合esp32。 | 点我访问 |
44 | rtos3.0 | 整理分享那些我在项目中常用的esp8266 rtos3.0版本的常见驱动,Button按键长短按、PWM平滑调光等。 | 点我访问 |
45 | rtos3.0 | 内置仅1M的Esp8285,如何攻破最棘手的OTA问题,大大节省资源成本开发产品 | 点我访问 |
46 | rtos3.0 | 详细分析Esp8266上电信息打印的数据,如何做到串口通讯上电不乱码打印; | 点我访问 |
47 | rtos3.0 | 无需外网,如何实现在本地局域网与控制端做数据交换的一些开发经验; | 点我访问 |
48 | rtos3.0 | 迟来的1024程序员祝福,开源分享一个驱动 ds18b20 获取温度的工程。 | 点我访问 |
49 | rtos3.2 | aliyun sdk 直连接入阿里云物联网平台,实现天猫精灵找队友零配网功能和语音控制。 | 点我访问 |
… | … | 持续更新,欢迎关注我,QQ群讨论群:434878850 |
玩转
esp8266
带你飞、加群付费
esp8266源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp8266
esp32源代码免费学习汇总(持续更新,欢迎star):https://github.com/xuhongv/StudyInEsp32
最近半个月都是忙得不可开交的,博文一直没有更新下来,飞燕平台的阿里智能接入下篇我会尽快的出来文章!最近接触了几个物联网平台,听说阿里云物联网平台的收费规则在
2018-10-17 10:18:53
改了下文档,于是乎,我就琢磨下怎么接入!用我们的esp8266
接入非常简单,而且是我们的MQTT
协议接入非常得心应手!
这篇是基于TCP
直连模式的MQTT
协议接入,后面还有TLP
直连模式的MQTT
协议接入,也就是需要制造证书,这个更麻烦,下篇会陆续出来!欢迎关注我一下哦!
MQTT
协议;阿里云平台大家都不陌生了,它有很多出色的产品,我们的物联网平台做的不错的 !我之前介绍的阿里智能、飞燕平台(阿里智能2.0)都是在阿里云的,不过阿里智能是开放给企业用户的,而飞燕平台(阿里智能2.0)虽然个人支持,但是量产时候设备貌似几块钱一个收费,但是支持天猫精灵,支持一键生成上位机
APP
的控制面板,还支持亚马逊智能音箱(当然收费啦!)
而这篇说到的
阿里云物联网平台
(早起也称为阿里物联套件)是只是提供服务器平台,提供边缘计算接口,就是所谓的大数据,支持自己的服务器对接,但是没有帮你弄好控制面板的。
MQTT
协议。在我眼中,
MQTT
协议对于我们这种嵌入式设备就是神一般的存在,这里我还是有必要去说下一些必要的MQTT
协议参数!!(MQTT服务器
下面统一简称为服务器
):
Host
:毋庸置疑,这个是服务器的地址。Port
:服务器的地址连接时候的端口号,一般是1883
,而webSocket
连接时候一般是8083
,而大家使用的微信小程序连接自家的服务器的端口务必是443
。userName
:这个是连接服务器的名字,这个名字是由服务器分配的,或者服务器不用验证时候,那么随意可以名字可以接入!这个是登陆需要的!userPassword
: 顾名思义就是用户密码,这个名字是由服务器分配的,或者服务器不用验证时候,那么随意可以密码可以接入!这个是登陆需要的!clientId
: :这个参数比较特殊,他是接入后服务器保存的一个身份证,假如后面有设备以相同的这个参数接入的话,那么当前的这个设备就会被服务器强制断开连接!所以这就是后者先得的说话法。所以这个参数必须保证要唯一!Keep Alive
: 这个就是底层的TCP
心跳来的,有一种说法是MQTT
是高级的TCP
接入,没错,MQTT
是基于TCP
的一种长连接的协议,所以会有心跳回复时间!下面是
MQTT
协议的具体实现过程:服务器通过分发一则同样主题的消息到指定的设备,那么设备就会收到消息!所以,有了订阅主题和发布主题消息的两大协议!
Subscribe
: 订阅主题,要传入订阅的主题Topic
和订阅的质量Qos
,订阅的质量分为三个等级0、1、2,具体对应什么关系,自己度娘下!Publish
: 发布一则带有主题的消息!要传入发布的主题Topic
和发布的质量Qos
,以及发布的消息Message
,还有一个参数Retained
,服务器持久化记录设置,一般设置为false
!基础版
,产品名字随意起! 我的是华东上海区域!貌似目前只能选择这个区域!记住这个区域,后面会用到!每次接入新的云平台,都必须要很清楚地对接和阅读这个接入文档,我仔细翻了下有关
MQTT
协议的,支持直连不加密和加密方式,这篇是讲解不加密的,那么下面让我带领大家去怎么阅读这个开发接入文档吧!下面是我截图的重要的说明!点我查阅文档
MQTT
连接的参数,首先我在全局宏定义下设备的参数,后面大家下载工程即可替换即可!下面前三个大家可以在设备详情拿到,至于第四个参数DeviceArea
顾名思义是区域,和我们这个产品的区域有关,上面提到我的是华东上海区域
,那么对应的就是"cn-shanghai"
,这个对应表在这里可以查阅!点我跳转查阅!#define DeviceName "smartLight"
#define ProductKey "a11ozGcYRSq"
#define DeviceSecret "pHTOZ0R0kDWyU3ruXkA4atelHxNAgdFI"
#define DeviceArea "cn-shanghai"
MQTT
协议连接的一些必要参数,那么在连接阿里云物联网平台于是如此!我们看看文档,注意其的必要的参数:${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com:1883
看到上面的
${YourProductKey}
和.${YourRegionId}
其实是个变量,这语法大家不要感到奇怪,其实就是PHP
语法的常量的一种表达方式!看字面意思,就是ProductKey
和RegionId
,前面一个好理解,后面那个参数就是我提到的DeviceArea
区域;至于1883
就是端口号!
userName
:deviceName+"&"+productKey
这个也比较好理解,就是2个参数的拼接,注意中间还有一个
&
符号;
userPassword
:sign_hmac(deviceSecret,content)
这个密码需要的是加密后的内容!!这个加密也许大家对这也就没那么好理解了,大家先要清除下加密方式哈希加密方式!常见我们用的最多的也就是
MD5
加密了!而阿里云提到支持多种加密方式,支持hmacmd5,hmacsha1,hmacsha256和 sha256,默认为hmacmd5,必须要实现声明;而我选择的是hmacsha1
加密方式,大家也可以选择MD5
加密!加密的密钥是DeviceSecret
参数;
hmacsha1
加密方式的过程需要是明文和密钥,示例:如果clientId = 12345,deviceName = device, productKey = pk, timestamp = 789,signmethod=hmacsha1,deviceSecret=secret,那么使用tcp方式提交给mqtt参数如下:
明文:mqttclientId=12345|securemode=3,signmethod=hmacsha1,timestamp=789|
加密后的内容:hmacsha1("secret","clientId12345deviceNamedeviceproductKeypktimestamp789")
topic
:clientId+"|securemode=3,signmethod=hmacsha1,timestamp=132323232|"
这个阿里云要求不用太严格,
clientId
:表示客户端ID,建议使用设备的MAC地址或SN码,64字符内。timestamp
:表示当前时间毫秒值,可以不传递。
topic
:这个在对应的设备详情可清楚看到,有默认的三个主题,当然了,你也可以自定义主题!
mac
地址,作为clientId
的参数一部分:uint8 tempMessage[6];
void ICACHE_FLASH_ATTR initGetMacAdress(void) {
//获取station下的mac地址
uint8 macAdress[6];
if (!wifi_get_macaddr(STATION_IF, macAdress)) {
INFO("Failed to get mac... \r\n");
} else {
INFO("succeed to get mac...\r\n");
}
os_sprintf(tempMessage, "%02x%02x%02x%02x%02x%02x", macAdress[0],
macAdress[1], macAdress[2], macAdress[3], macAdress[4],
macAdress[5]);
INFO(" MacAdress: %s\r\n", tempMessage);
}
mqtt_config.h
声明一下必要的常量,大家拿到工程后修改下aliyun 设备信息
即可,其他是自动匹配的:/*aliyun 设备信息*/
#define DeviceName "smartLight"
#define ProductKey "a11ozGcYRSq"
#define DeviceSecret "pHTOZ0R0kDWyU3ruXkA4atelHxNAgdFI"
#define DeviceArea "cn-shanghai"
/*aliyun 设备信息 结束*/
//MQTT域名
#define MQTT_HOST ""ProductKey".iot-as-mqtt."DeviceArea".aliyuncs.com"
//端口号
#define MQTT_PORT 1883
//用户名
#define MQTT_USER ""DeviceName"&"ProductKey""
#define MQTT_BUF_SIZE 1024
#define MQTT_KEEPALIVE 60 //心跳
#define MQTT_PASS ""
#define MQTT_CLIENT_ID ""
//连接路由器的名字和密码
#define STA_SSID "HuaWei_Text_Only"
#define STA_PASS "xuhong@123456"
ssl_hmac_sha1()
方法是esp8266
内置的已经实现了的,所以你是找不到源码在哪里的!这是我就在某网站看到的,呵呵!!
ssl_hmac_sha1()
方法的参数是:待加密的信息 message 、密钥 secret、 加密之后的信息;加密后还要转下为字符串!!切记切记。
void user_init(void) {
//获取mac地址··············
initGetMacAdress();
//获取随机码··············
int randtimestamp = os_random() % 1000;
uint8_t mydigest[20], str[40], dst[41], message[80];
os_delay_us(60000);
//tempMessage是设备的mac地址,这个可以自定义为mac地址或者sn序列号
os_sprintf(message, "clientId%sdeviceName%sproductKey%stimestamp%d",
tempMessage, DeviceName, ProductKey, randtimestamp);
os_sprintf(randclient, "%s|securemode=3,signmethod=hmacsha1,timestamp=%d|",
tempMessage, randtimestamp);
os_printf(" message: %s \n", message);
os_printf(" before ssl_hmac_sha1 client_id: %s \n", randclient);
os_delay_us(60000); //不加延迟貌似会影响randclient
// 待加密的信息 message 、密钥 secret、 加密之后的信息 mydigest
ssl_hmac_sha1(message, os_strlen(message), DeviceSecret,
os_strlen(DeviceSecret), mydigest);
// 再一次转换为字符串
int i;
for (i = 0; i < 20; i++) {
str[2 * i] = mydigest[i] >> 4;
str[2 * i + 1] = mydigest[i] & 0xf;
}
for (i = 0; i < 40; i++) {
os_sprintf(&dst[i], "%x", str[i]);
}
dst[40] = '\0';
os_delay_us(60000);
//打印下
os_printf(" after client_id -> %s\r\n", randclient);
os_printf(" user -> %s\r\n", MQTT_USER);
os_printf(" pass -> %s\r\n", dst);
}
static void ICACHE_FLASH_ATTR sendMsg() {
char *random = "13";
os_sprintf(random, "%d", os_random() % 100); //获取随机数
INFO("WenDu:%s\r\n", random);
u8 topic[48];
os_sprintf(topic, "/%s/%s/update", ProductKey, DeviceName);
MQTT_Publish(&mqttClient, topic, random,
os_strlen(random), 0, 0);
}