今天主要和大家聊一聊,智能家居物联网的实现,今天主要使用Qt开发智能家居的一个物联应用。可以利用云服务远程控制设备并与设备通信。本文将实现远程点亮开发板的LED作为一个实例。​

在生活中,我们可以使用WIFI智能插座,来远程控制家电设备。例如,远程开热水器,远程打开空调,窗帘等。其实这些设备的原理就是将WIFI插座注册到云服务器上,然后通过手机的APP来访问云服务,来控制WIFI插座。

第一:基本硬件介绍

需要一个ESP8266串口转WIFI模块以及需要加上一个USB-TTL模块。USB线可以接入电脑,使用串口调试此模块。

注意:如果使用其他wifi模块,需要刷接入云的固件才能接入服务器。

第二:测试WIFI模块功能  

要实现物联网的功能,需要使用ESP8266 WIFI模块。先测试WIFI模块是否能够正常使用, 是否能够正常连接服务器。

在云端对设备先进行设计,取好名字和设备号。

使用WIFI模块串口通信的波特率为115200,在Ubuntu上设置WIFI模块时,一般串口名称为“ttyUSB0”,默认是没有 权限访问这个/dev/ttyUSB0 设备的。所以我们需要使用下面的指令修改权限。

sudo chmod 777 /dev/ttyUSB0

第三:代码实现的具体方法

#include "esp8266.h"#include <unistd.h>#include <QDebug>Esp82266::Esp82266(QWidget *parent){ Q_UNUSED(parent) /* 串口对象,用于与 Esp8266 模块通信 */ serialPort = new QSerialPort(this); /* 定时器对象,用于定时发送设备在线的心跳包 */ timer = new QTimer(); /* led 对象,用于串口接收到云发过来的数据,然后控制板子的 LED */ led = new Led(this); /* 设置串口名 */#if __arm__ serialPort->setPortName("ttymxc2");#elseserialPort->setPortName("ttyUSB0");#endif/* 设置波特率 */ serialPort->setBaudRate(115200);/* 设置数据位数 */ serialPort->setDataBits(QSerialPort::Data8);/* 设置奇偶校验 */ serialPort->setParity(QSerialPort::NoParity); /* 设置停止位 */ serialPort->setStopBits(QSerialPort::OneStop); /* 设置流控制 */ serialPort->setFlowControl(QSerialPort::NoFlowControl); if (!serialPort->open(QIODevice::ReadWrite)) qDebug()<<"串口无法打开!可能正在被使用!"<<endl; else { qDebug()<<"串口打开成功!"<<endl; } /* 开始连接云 */ connectToClound(); connect(serialPort, SIGNAL(readyRead()), this, SLOT(serialPortReadyRead())); connect(timer, SIGNAL(timeout()), this, SLOT(onTimerTimeOut()));} void Esp82266::serialPortReadyRead() { /* 接收缓冲区中读取数据 */ QByteArray buf = serialPort->readAll(); QString temp = QString(buf); readData.append(temp); qDebug()<<temp<<endl; if (readData.contains("ready")) { /* 如果复位成功 */ sendCmdToEsp8266("AT+CWMODE=1"); readData.clear();} if (readData.contains("OK") && readData.contains("AT+CWMODE")) { qDebug()<<"设置 STA 模式成功"<<endl; sendCmdToEsp8266("AT+CWJAP=\"ALIENTEK-YF\",\"15902020353\""); qDebug()<<"开始连接 WIFI"<<endl; readData.clear(); } if (temp.contains("WIFI GOT IP")) { qDebug()<<"连接 WIFI 成功"<<endl;sleep(2);/* 原子云的设备号及密码 */ sendCmdToEsp8266("AT+ATKCLDSTA=\"02314701717851074890\",\"12345678\""); qDebug()<<"开始连接云请等待"<<endl; } if (temp.contains("CLOUD CONNECTED")) { qDebug()<<"连接云成功"<<endl; sleep(2); /* 15s 就发送一次心跳包 */ timer->start(15000);} if (temp == "开") led->setLedState(true); else if (temp == "关") led->setLedState(false);} Esp82266::~Esp82266(){ serialPort->close(); delete timer; timer = nullptr;} void Esp82266::sendCmdToEsp8266(QString cmd){ cmd = cmd + "\r\n"; QByteArray data = cmd.toUtf8(); serialPort->write(data);}void Esp82266::connectToClound(){ /* 重启模块,注意若已经连接上原子云, * 需要重新上电或者短接 RST 脚来复位模块 */ sendCmdToEsp8266("AT+RST"); } void Esp82266::sleep(int second) { usleep(second * 1000000); }void Esp82266::sendTextMessage(QString message) { serialPort->write(message.toLatin1());}void Esp82266::onTimerTimeOut(){  sendTextMessage("online");  qDebug()<<"发送设备在线心跳包"<<endl;}

分析:添加路由器的WiFi热点以及密码,以及云端的设备编号和密码

​第四:云端API接口与实现

在与云端进行通信的时候,必须先熟悉云端的API接口。网络端的常见的云端API通信流程图​。

在编写QT应用实现的时候,应该把重点放在HTTP与WEBSocket方向上​。一些账号信息与设备信息是通过HTTPS协议接口获取的,通信用WebSocket协议接口​。

#include "webapi.h"#include <QUuid>#include <QRegularExpression>Webapi::Webapi(QObject *parent){ this->setParent(parent); /* 数组清空 */ groupID.clear(); deviceID.clear(); deviceNumber.clear(); timer = new QTimer(); connect(timer, SIGNAL(timeout()), this, SLOT(onTimerTimeOut())); networkAccessManager = new QNetworkAccessManager(this); orgURL = "https://cloud.alientek.com/api/orgs"; /* 请填写自己的 token 信息!!! */ api_token = "bf591984c8fa417584d18f6328e0ef73";/* 获取账号机构列表 */ getOrgURL(); QUuid uuid = QUuid::createUuid(); random_token = uuid.toString(); webSocket = new QWebSocket();/* 需要加一些安全配置才能访问 https */ QSslConfiguration config; config.setPeerVerifyMode(QSslSocket::VerifyNone); config.setProtocol(QSsl::TlsV1SslV3); webSocket->setSslConfiguration(config); connect(webSocket, SIGNAL(connected()), this, SLOT(webSocketConnected())); connect(webSocket, SIGNAL(binaryMessageReceived(QByteArray)), this, SLOT(onBinaryMessageReceived(QByteArray))); } Webapi::~Webapi() { delete timer; delete webSocket; webSocket = nullptr; } void Webapi::getOrgURL() { getDataFromWeb(QUrl(orgURL));} /* 获取设备分组列表 */ void Webapi::getGroupListUrl(){ getDataFromWeb(QUrl(groupListUrl));} /* 获取设备的信息 */ void Webapi::getDevOfGroupUrl() { getDataFromWeb(QUrl(devOfGroupUrl)); }/* 获取设备连接状态 */ void Webapi::getConStateUrl(){ getDataFromWeb(QUrl(conStateUrl));} /* 从云服务器获取数据 */ void Webapi::getDataFromWeb(QUrl url) { /* 网络请求 */ QNetworkRequest networkRequest; /* 需要加一些安全配置才能访问 https */ QSslConfiguration config;config.setPeerVerifyMode(QSslSocket::VerifyNone);config.setProtocol(QSsl::TlsV1SslV3); networkRequest.setSslConfiguration(config); /* 设置访问的地址 */ networkRequest.setUrl(url); /* 网络响应 */ networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json;charset=UTF-8"); /* 参数二为原子云帐号的 token 信息,填写自己的 */ networkRequest.setRawHeader("token", api_token.toLatin1()); QNetworkReply *newReply = networkAccessManager->get(networkRequest); connect(newReply, SIGNAL(finished()), this, SLOT(replyFinished())); connect(newReply, SIGNAL(readyRead()), this, SLOT(readyReadData()));}

项目代码可参考如下连接​:

https://download.csdn.net/download/weixin_41114301/85875381

01_smarthome 项目下:

1、 webapi 文件夹为云平台的应用程序,主要用来与原子云通信。

2、Headers 文件夹为界面设计的头文件。 

3、Sources 文件夹为界面设计的源文件。 esp8266 项目下:

4、led 文件夹为 I.MX6U 开发板控制 LED 的接口程序。 

5、Headers 文件夹为 esp8266 通信的头文件。 

6、Sources 文件夹为 esp8266 通信的源文件(使用串口通信)。

第五​:运行结果

物联网智能家居基本方法实现之经典相关推荐

  1. 【百问网7天物联网智能家居】训练营学习笔记(七)

    在完成业务裸机的过程中,会用到freertos的任务通知和队列这两个内容 回顾下我们一开始的项目需求: 现在来看这个需求,在上了前面的课程后,相信大家心里已经有了实现它的方法脉络了 我们对于mini开 ...

  2. 7天物联网智能家居实战-DAY1

    7天物联网智能家居实战 Day1 Day2 Day3 Day4 Day5 Day6 Day7 本课程时长七天 共计七次更新 文章目录 7天物联网智能家居实战 前言 一.上午-基础课程 二.下午-提高课 ...

  3. 7天物联网智能家居实战-DAY7

    本课程时长七天 共计七次更新 文章目录 前言 1.课程内容 前言 这是七天物联网智能家居训练营的最后一节课了,整个课程可以说是从零开始,稳扎稳打,在七天这样一个很短的时间尺度上,确实能从毫无概念,到搭 ...

  4. esp8266 蓝牙耳机_走进物联网智能家居-手把手带你制作wifi智能开关-ESP8266学习笔记(二)...

    走进物联网智能家居-手把手带你制作wifi智能开关-ESP8266学习笔记(二) 2020-05-09 13:44:11 9点赞 72收藏 6评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标 ...

  5. 物联网智能家居总体设计与实现

    物联网智能家居突出特点就在于家居都连接入网,且都可以通过一定手段进行智能控制. 图3-1 物联网智能家居框架        如图3-1所示,构建了一个现代家庭中所涉及到的所有物联网智能家居相关的框架. ...

  6. 7天物联网智能家居实战训练营(百问网)-day1

    目录 前言 一.学习路线 1.什么是嵌入式? 2.怎么学习嵌入式? 3.学习的基础内功? 二.基本概念 1.什么是arm? 2.arm架构的分类. 三.开发流程 1.交叉开发, 2.调试下载 前言 学 ...

  7. 开源项目搭建私有物联网智能家居接入天猫精灵控制

    开源项目搭建私有物联网智能家居接入天猫精灵控制 最近几年随着物联网的高速发展,众多智能硬件厂商都开发出自己的智能家居产品,都想在物联网智能家居市场上占有自己的一席之地,而随着众多智能音箱的问世,智能家 ...

  8. 基于电力线载波的物联网智能家居控制系统研究方案

    基于电力线载波的物联网智能家居控制系统研究方案 2013年05月23日 阅读数:1545次 电力线通信(Power Line Communication)技术是指把载有信息的高频加载于电流,利用既有电 ...

  9. 基于 SpringBoot + Vue 实现的物联网/智能家居系统

    简介 物美智能是一套开源的软硬件系统,可用于二次开发和学习,快速搭建自己的物联网/智能家居系统.硬件工程师可以把自己的设备集成到系统:软件工程师可以使用项目中的设备熟悉软硬件交互. 项目架构 服务端使 ...

最新文章

  1. Installshield 2015 实现检测某安装文件是否存在并运行安装
  2. Linux varnish代理服务器安装以及健康检查
  3. 边缘计算 — 与硬件厂商
  4. C#算数运算符、关系运算符、逻辑运算符、语句
  5. gradle的插件包
  6. 数据结构之栈与递归的应用(八皇后递归解法)
  7. 中小企业怎样转型做跨境电商独立站?
  8. Machine Learning - II. Linear Regression with One Variable单变量线性回归 (Week 1)
  9. 上周的工作总结和下周的学习安排
  10. Java基础知识拾遗--IO篇
  11. JavaWeb出现404一个很隐蔽的原因
  12. 人人开源项目搭建到服务器,四、人人开源搭建后台与前端 2020-06-16
  13. Flink实时数仓(尚硅谷)- 数据采集
  14. CaysnPrinter - Windows平台开发包打印示例程序及接口说明文档 - 20170710
  15. MATLAB中调用eemd函数
  16. 做网站的一些定律原理和效应
  17. 八爪鱼采集ajax表格,设置八爪鱼采集器ajax延时采集分页列表的方法
  18. 【优化求解】基于灰狼算法GWO求解最优目标matlab代码
  19. 怎么开发自己的微信小程序?
  20. 二叉树与哈希表以及基本算法

热门文章

  1. 鸿蒙系统 基于安卓,鸿蒙系统(鸿蒙OS),不同于安卓,是面向未来的更广泛的系统...
  2. Unity冒险游戏集合
  3. Windows 10 安装虚拟专用网client端
  4. 不干胶标签有哪些优点呢?
  5. 星际2中复刻DOTA白虎
  6. unity android光照贴图格式,Unity3D-光照贴图技术
  7. 汽车装配线粘合剂市场现状及未来发展趋势
  8. “狂徒”富豪严介和经典语摘
  9. 【TensorFlow】计算图graph的使用学习笔记(二)
  10. (混沌系统)图像加密之Logistic混沌映射matlab仿真