ESP8266连接物联网平台

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP8266连接物联网平台相关的知识,希望对你有一定的参考价值。

1.物联网平台简介

     物联网(Internet of Things,简称IoT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术,实时采集任何需要监控、 连接、互动的物体或过程,采集其声、光、热、电、力学、化学、生物、位置等各种需要的信息,通过各类可能的网络接入,实现物与物、物与人的泛在连接,实现对物品和过程的智能化感知、识别和管理。物联网是一个基于互联网、传统电信网等的信息承载体,它让所有能够被独立寻址的普通物理对象形成互联互通的网络。

   物联网平台是一个集成了设备管理、数据安全通信和消息订阅等能力的一体化平台。向下支持连接海量设备,采集设备数据上云;向上提供云端API,服务端可通过调用云端API将指令下发至设备端,实现远程控制。

说到物联网平台,就不得不说一下MQTT协议了,什么是MQTT协议呢?

2.MQTT协议

    MQTT(消息队列遥测传输)是 ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息
协议。 它工作在 TCP/IP 协议族上, 是为硬件性能低下的远程设备以及网络状况糟糕的情况
下而设计的发布/订阅型消息协议, 为此, 它需要一个消息中间件 。

      MQTT 是一个基于客户端-服务器的消息发布/订阅传输协议。由 IBM 在 1 999 年发布。MQTT
协议是轻量、 简单、 开放和易于实现的, 这些特点使它适用范围非常广泛。 在很多情况下,
包括受限的环境中, 作为一种低开销、 低带宽占用的即时通讯协议, 使其在物联网、 小型设
备、 移动应用等方面有较广泛的应用。 如: 机器与机器( M2M) 通信和物联网( IoT) 。 其
在通过卫星链路通信传感器、 偶尔拨号的医疗设备、 智能家居、 及一些小型化设备中已广泛
使用。

     MQTT 最大优点在于, 用极少的代码和有限的带宽, 为连接远程设备提供实时可靠的消
息服务。

ESP8266连接物联网平台_MQTT

3.物联网平台接入

1.注册腾讯云账号,登陆云平台

ESP8266连接物联网平台_MQTT_02

  1. 搜索物联网平台,登录物联网平台。

ESP8266连接物联网平台_MQTT_03

2.创建项目

  1. 进入物联网控制台

ESP8266连接物联网平台_MQTT_04

  2. 创建项目

ESP8266连接物联网平台_物联网_05

 3. 创建产品

ESP8266连接物联网平台_物联网_06

ESP8266连接物联网平台_MQTT_07

3.创建产品功能

ESP8266连接物联网平台_物联网_08

ESP8266连接物联网平台_MQTT_09

ESP8266连接物联网平台_物联网_10

ESP8266连接物联网平台_物联网_11

ESP8266连接物联网平台_物联网_12

4.设备调试

ESP8266连接物联网平台_腾讯云_13

ESP8266连接物联网平台_腾讯云_14

//设备名,产品ID,设备秘钥修改为自己所创建产品参数
#define DeviceName "Smart_123"//设备名
#define ProductID "LA57WL612"//产品ID
#define DeviceSceret "9JHiCQ5668uZlVDuQ2ZnQ=="//设备秘钥

5.创建工程,连接物联网平台

ESP8266连接物联网平台_物联网_15

ESP8266连接物联网平台_腾讯云_16

//服务器IP:PRODUCT_ID.iotcloud.tencentdevices.com   ---PRODUCT_ID对应产品ID
#define SERVER_IP "LA57WL612.iotcloud.tencentdevices.com"//服务器IP
#define SERVER_PORT 1883 //端口号
//客户端ID:产品ID设备名
#define ClientID "LA57WL612Smart_123"
//用户名和密码可使用密码生成工具完成
#define Username "LA57WL612Smart_123;12010126;R05S3;1621619622"
#define Password "9ebe0d0069ac4dd1e9e98664abc9f726c13b5a150190afdfa7b3c12240ff1e73;hmacsha256"//密文
//订阅主题:$thing/down/property/ProductID/DeviceName ---ProductID产品ID,DeviceName设备名
#define SET_TOPIC "$thing/down/property/LA57WL612/Smart_123"//订阅

6.主题订阅

ESP8266连接物联网平台_MQTT_17

ESP8266连接物联网平台_腾讯云_18

//订阅主题:$thing/down/property/ProductID/DeviceName ---ProductID产品ID,DeviceName设备名
#define SET_TOPIC "$thing/down/property/LA57WL612/Smart_123"//订阅
//发布主题:$thing/up/property/ProductID/DeviceName
#define POST_TOPIC "$thing/up/property/LA57WL612/Smart_123"//发布

7.初始化ESP8266模块,配置WIFI模式为TCP+STA模式

#define WIFI_NAME "wbyq"//WIFI名
#define WIFI_PASSWORD "asdfghjkl23"//wifi密码
char mqtt_message[200];//上报数据缓存区
int main()

int i=0;
u8 stat=0;
u32 time=0;
u16 cnt=0;
float temp;
Beep_Init();//蜂鸣器初始化
Led_Init();//LED初始化
Key_Init();//按键初始化
Usartx_Init(USART1,115200,72);
Usartx_Init(USART3,115200,36);
TIMx_Init(TIM2,72,20000);//通过定时器2辅助串口接收数据,20ms
TIMx_Init(TIM4,72,20000);//通过定时器2辅助串口接收数据,20ms
DS18B20_Init();
// RTC_Init();//RTC初始化
printf("初始化完成\\r\\n");
while(1)

stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);
if(stat==0)break;
Delay_Ms(500);
printf("stat=%d\\r\\n",stat);

printf("服务器连接成功\\r\\n");
while(1)

MQTT_Init();
stat=MQTT_Connect(ClientID,Username,Password);
if(stat==0)break;
Delay_Ms(500);
printf("正在连接....\\r\\n");

printf("连接成功\\r\\n");
stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
if(stat)printf("订阅失败\\r\\n");
else printf("订阅成功\\r\\n");
while(1)

if(usart3_flag)

for(i=0;i<usart3_cnt;i++)

printf("%c",usart3_rx_buff[i]);

usart3_cnt=0;
usart3_flag=0;

Delay_Ms(1);
time++;
cnt++;
if(time>=5000)

time=0;
MQTT_SentHeart();//发送心跳包

if(cnt>=1000)

cnt=0;
temp=DS18B20_GetTemp()*0.0625;
sprintf(mqtt_message,"\\"method\\":\\"report\\",\\"clientToken\\":\\"123\\",\\"params\\":\\"time\\":%d,\\"temp\\":%.2f",time,temp);//温度
MQTT_PublishData(POST_TOPIC,mqtt_message,0);


8.设备上报数据格式

ESP8266连接物联网平台_MQTT_19


"method":"report",//上报设备属性
"clientToken":"123",//消息配对标识
"timestamp":1212121221, //可不填,默认为系统时间
"params":
"power_switch":1, //设备属性power_switch
"color":1, //设备属性color
"brightness":32 //设备属性brightness

9.执行效果

  设备上报数据到平台

ESP8266连接物联网平台_腾讯云_20

平台下发数据到设备

ESP8266连接物联网平台_物联网_21

移动端界面:

ESP8266连接物联网平台_腾讯云_22

ESP8266连接物联网平台_腾讯云_23

Python轻应用:连接物联网平台并控制设备硬件

 

1、前言

Python 语言的是一款非常容易使用的解释性语言,它的主要特点如下:

  • 易学易用
  • 可扩展可移植
  • 丰富的三方库

正是由于以上这些特点,使得python在一些逻辑简单,功能复杂的场景应用非常广泛。近几年,随着人工智能的飞速发展,Python 的优点得到的充分的体现,因此成为了AI开发的首选语言。

MicroPython(简称mpy)在保留了python语言主要特性的基础上,他还对嵌入式系统的底层做了非常不错的封装,它的特点如下:

  • 沿用python语法和基本数据结构,保持易学易用性
  • 提供基于嵌入式系统的硬件功能库封装,让嵌入式开发简单便捷

今天要介绍的是HaaS100如何使用micropython ,连接阿里云的物联网平台,并通过云端来控制设备的LED 灯。

 

2、方案介绍

阿里云物联网平台提供安全可靠的设备连接通信能力,支持设备数据采集上云,规则引擎流转数据和云端数据下发设备端。此外,也提供方便快捷的设备管理能力,支持物模型定义,数据结构化存储,和远程调试、监控、运维。

本文通过物联网平台下发修改HaaS100的LED状态的命令,HaaS100上的Python程序接收命令,并控制LED灯。具体交互方案设计如下:

 

 

3、效果视频

LinkKit 控制HaaS100

 

4、代码清单

# -*- coding: UTF-8 -*-

import iot

import utime

# 请替换物联网平台申请到的产品和设备信息,可以参考文章:https://blog.csdn.net/HaaSTech/article/details/114360517

productKey = "xxxxx"

productSecret = "xxxxx"

deviceName  =    "xxxxx"

deviceSecret  =   "xxxx"



on_connected = False

# 初始化linkkit sdk

key_info = {

    'region' : 'cn-shanghai' ,

    'productKey': productKey ,

    'deviceName': deviceName ,

    'deviceSecret': deviceSecret ,

    'productSecret': productSecret

}

device = iot.Device(key_info)

# 物联网平台连接成功的回调函数

def on_connect():

    global on_connected

    on_connected = True



device.on('connect',on_connect)

# 设置props 事件接收函数(本案例是云端控制led事件)

def on_props(request):

    from driver import GPIO

    import ujson

    ON = 0

    OFF = 1

    #服务端返回的json 转换成dict

    payload = ujson.loads(request)

    #获取dict 中的led 状态字段

    stat = payload["LEDSwitch"]

    gpio = GPIO()

    # open 函数支持的参数列表如下:

    # led1;led2;led3;led4;led5

    gpio.open('led1')

    if stat == 1:

        gpio.write(ON)

    else:

        gpio.write(OFF)

    utime.sleep_ms(200)

    gpio.close()

device.on('props',on_props)

# 连接物联网平台

device.connect()

# 触发linkit sdk持续处理server端信息

while(True):

    # device.do_yield(200)

    if on_connected:

        print('物联网平台连接成功')

        break

    else:

        utime.sleep(1)



while True:

    utime.sleep(0.2)

# 断开连接

device.close()

以上就是python 轻应用的主体代码,我们将其保存到文件 LinkKitControlLed.py, 然后拷贝到 sdcard 的根目录。

它的主要功能如下:

  1. 连接物联网平台
  2. 等待物联网平台的云端消息,并处理

 

注意事项:

  • 请务必将代码中以下信息替换成自己的物联网平台上相关信息


 

PRODUCT_KEY = "a1uTFk4xjko"

PRODUCT_SECRET = "xxxxxxx"

DEVICE_NAME  =    "mpy_001"

DEVICE_SECRET  =   "xxxxxxxxxxxxxxx"

 

  • 运行代码之前请务必保证机器联网,python 联网指令如下
python /data/python-apps/wifi/main.py wifi_ssid  wifi_password

 

5、物品清单

5.1、硬件

  • HaaS100 开发板一块
  • 电源一个
  • micro usb 一个
  • sdcard 一个

注意事项:

  • HaaS100支持外接微型SD卡(Micro SD),最大支持64GB数据的存储,SD卡槽位于开发板背,可以外接微型SD存储卡
  • sdcard 格式支持:  FAT16/FAT32
  • 本案例中暂时不支持exFAT 格式

 

5.2、软件

  • 最新的HaaS100 开源代码
  • 串口工具

 

6、实现步骤

在开始之前,务必保证按照Python轻应用官网中的快速开始章节,烧录官方固件或者自己编译固件烧录。

 

6.1、创建产品和设备

首先参考文章 https://help.aliyun.com/document_detail/189183.html?spm=a2c4g.11174283.6.572.3a8b1668juSbg2 ,创建一个自己的产品和设备

如上图所示,笔者创建的产品是 mpy_test, 设备是mpy_001

 

6.2、创建物模型

如上图所示,首先点击产品,选择我们自己创建的产品mpy_test, 然后点击编辑草稿,添加自定义功能 进入下图中的界面

选择属性,输入LED开关, 选中弹出的默认属性, 点击确定即可完成属性的添加

也可以完全自己定义一个属性,确保属性主程序代码中的属性键的名称和 这里一致即可。

创建完成以后,点击发布即可。

 

6.3、执行轻应用代码

烧录完成以后,插入sdcard, 开机并连接串口

通过串口输入:

python /sdcard/LinkKitControlLed.py

 

就可以完成轻应用的启动,启动成功以后,串口会出现如下打印:

连接成功以后,主程序就会等待云端的消息分发,收到消息以后就会通过on_prop_set 函数处理

 

6.4、发送云端控制指令

在设备属性发布以后,我们就可以开始在线调试了

如上图所示:

  • 选择监控运维---->在线调试
  • 选择产品mpy_test 和 设备 mpy_001
  • 正常情况下,设备已经在线,我们就可以看到下面的调试选项了
  • 选择属性调试---->默认模块---->LED开关
  • 选择参数  开启-1
  • 点击调试,设置即可

 

发送成功以后,设备端串口会收到如下打印,最终调用回调函数,开启设备上的led 灯,从而实现上图中的效果

 

技术交流

Python轻应用继承了Python易学易用的特点,同时提供了基于嵌入式硬件的基础库封装,让开发者可以很方便的通过交互式的环境,实时进行嵌入式开发,让嵌入式开发也变得简单方便。

如需更多技术支持,可加入钉钉开发者群,获取一对一的技术支持!

 

以上是关于ESP8266连接物联网平台的主要内容,如果未能解决你的问题,请参考以下文章

RT-Thread&BearPi 开发笔记 -- 小熊派基于RT-Thread使用ESP8266进行网络连接

阿里云物联网平台配置ESP8266真实设备AT串口连接,支持MQTT协议通信

阿里云物联网平台配置ESP8266真实设备AT串口连接,支持MQTT协议通信

物联网esp8266+云服务器搭建物联网通道

esp8266和MQTT(MQTT介绍)

8266wifi模块是啥