物联网(Iot)台灯设计完整教程(长图文)

本文详细介绍了物联网台灯的设计过程,包括MQTT客户端、EMQ服务器端、微信小程序客户端开发和阿里云服务器配置。通过Esp8266 WiFi模块与MQTT服务器进行通信,利用微信小程序控制台灯的开关,实现物联网家居应用。文章涵盖了从硬件选择、服务器搭建到小程序开发的完整流程,并提供了关键代码和配置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现如今随着物联网的概念深入人心,物联网的设备也越来越普及,本篇文章介绍的就是一个物联网台灯的设计。该设计主要包含物联网芯片开发、微信客户端开发、后台服务器端开发以及三个组件之间互联等,其总体设计逻辑框图如图1所示。

图 1远程控制台灯设计逻辑图

本设计中,采用的物联网芯片为四博智联科技公司生产的Esp8266只能WiFi模块。生产该类WiFi模块的公司有很多,除了四博智联之外,相对更有名的应该是乐鑫以及安信可公司,但不知道什么原因,设计过程中购得的所有芯片都是四博智联的。当然,不论厂家是哪一个,芯片逻辑以及开发工具基本都是通用的。

最初设计时由于之前研究生过程中做过电路设计相关的课题工作,所以自认为可以直接对芯片进行电路设计以及软件调试。但在调试了一段时间之后,发现自己连接的电路完成不了通信,使用电脑串口调试完全没有反应。其实这个模块的电路设计很简单,但也可能是因为连接线接触不好的原因(使用杜邦线以及面包板实现的连接),致使一直不能实现串口调试。后来考虑到时间成本,于是网上又选购了一个带有调试接口的wifi模块。该模块入手即可串口调试,很是方便,节省了大量开发时间。所以对于电路知识储备不足的同学,可以选择开发模块入手。网购的傻瓜式模块如图所示。

图 2 傻瓜式wifi模块

 

本设计中WiFi模块需要完成自动入网以及和MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)服务器通信的功能,所以在此对于基础的AT指令操作不进行介绍,我们直接进行WiFi模块自主联网的设计。

WiFi模块开发环境,选用的是安信可的IDE设计工具AiThinkerIDE_V0.5。之所以选择这个软件是因为本人做dsp开发时采用的工具是Code Composer Studio,安信可的IDE设计软件和平常用到的Code Composer Studio开发环境类似,所以上手相对容易。其开发环境如下图所示,用过linux中Eclipse软件的同学对这个界面应该同样熟悉。

图 3 AiThinkerIDE开发环境

 

该软件中还自带一些示例工程,其中包含Wifi连接的示例程序,所以可以直接将例子中的程序模块拿来使用。需要修改的地方主要为宏定义,包括需要连接的wifi名称以及密码等,其他的函数方法都已经封装完成。

Wifi模块与服务器端进行数据交互采用的是MQTT协议。MQTT是IBM开发的一个即时通讯协议,是面向M2M(Machine-to-Machine/Man)和物联网的连接协议,采用轻量级发布和订阅消息传输机制。总的来说,就是因为集成简单,消息发布接收迅捷,适合在硬件这些本来有限的开发空间,实现远程控制。

MQTT通信的基本方式为发布与订阅。在一个通信网络中,设备既可以发布消息,也可以接收消息。假设某一个设备A在网络中充当的是发布消息的一方,发布消息的格式为“主题”+“内容”,如果另一个设备B想要接收到A发布的消息,则只需要启动订阅功能,并且将订阅的“主题”与A发布的“主题”一致,则B可以接收到A发布的消息内容;若设备B订阅的消息主题与A发布的主题不一致,则设备B就不会收到A发布的消息了。因此,在我看来,这个主题实际上充当了“filter”的功能,匹配则通过,否则滤掉。

MQTT客户端

IDE中对于MQTT客户端的配置通过例程修改的话相对比较简单,主要需要修改的内容如下图所示:

图 4 MQTT客户端配置

 

其中各个宏定义的意思主要为:

MQTT_HOST:MQTT服务器所在的IP地址。

MQTT_PORT:MQTT通信使用的端口号,该协议使用的就是1883端口。

MQTT_CLIENT_ID:这是客户端的ID,一般每一个客户端都拥有自己单独的ID,同一个局域网络内不能有重复的ID,所以也可以使用系统登陆时间作为ID。

MQTT_USER:MQTT客户端登陆到服务器端的账号。

MQTT_PASS:MQTT客户端登陆进入服务器的密码。

STA_SSID:本地的WIFI账号名称。

STA_PASS:本地WIFI登陆密码。

代码中关于发布或者订阅消息的模块在函数mqttConnectedCb中进行配置,具体代码如下所示,该段代码中订阅了两个主题,并且依次发布了三个主题消息。函数MQTT_Subscribe以及MQTT_Publish中的第二个参数为主题名称。

void mqttConnectedCb(uint32_t *args)

{

         u32_t ret = 0;

         os_printf("MQTT: Begin to subscribe\r\n");

    MQTT_Client* client = (MQTT_Client*)args;

    INFO("MQTT: Connected\r\n");

    ret = MQTT_Subscribe(client, "/lol_get/0", 0);

    os_printf("MQTT subscribe result is : %d\r\n",ret);

    MQTT_Subscribe(client, "/Shutdown/", 1);

    MQTT_Subscribe(client, "/Lighton/", 2);



    MQTT_Publish(client, "/lol/0", "hello0", 6, 0, 0);

    MQTT_Publish(client, "/lol/1", "hello1", 6, 1, 0);

    MQTT_Publish(client, "/lol/2", "hello2", 6, 2, 0);

}

程序修改完成之后,切记一定要点击保存所有的按钮,否则即使使用编译选项,也只是编译的修改前的内容,这也是IDE的一个漏洞。保存并且编译成功之后,在IDE的控制台(console)界面会显示如图5所示的信息。这就是代码烧写到wifi模块flash上的地址。


图 5 IDE程序编译结果

接下来我们需要进行程序的烧写,使用数据线连接wifi模块之后,打开我们的烧写软件ESPFlashDownloadTool_v3.4.4,然后按照图6的设置将待烧写的文件配置好,点击“START”即可进行烧写操作。另外由于各个芯片及模块的SPI主频以及flash等参数不一致,所以需要各位翻阅用户手册后选择合适的参数配置。

图 6 IDE程序烧写配置

 

在程序固化过程中,软件底部的进度条会显示程序固化的进度,所有程序固化完成之后的显示信息如图7所示:

图 7烧写成功提示

 

这样我们修改后的MQTT的客户端代码就固化到我们的wifi模块中,重新上电wifi模块,将会看到如图8所示的内容:wifi模块的MQTT客户端程序联网成功(Connect to broker,这里的broker其实就是EMQ服务器端)并且订阅发布了消息。

 

图 8 Esp8266wifi模块调试结果

 

这就说明我们的Esp8266 wifi模块的MQTT客户端已经配置成功。此时就可以通过另一个MQTT的节点与其通信测试。经过验证,同一个MQTT的网络中只需要有一个服务器端,即目前的EMQ服务器(稍后会进行介绍),网络内所有与该服务器相连的客户端节点均可以通过发布订阅消息实现点对点的交互。

EMQ服务器端

Esp8266的wifi模块中即使加入了程序,也只能是做客户端,所以需要有一个服务器端来与之通信并且进行后台信息处理。在此,我们选用的是免费开源的EMQ服务器,EMQ是基于Erlang/OTP语言平台开发,百万级分布式开源物联网MQTT消息服务器。为了保证服务器能够长时间处于开启的状态,我们选择了阿里云的服务器作为EMQ服务器的运载平台。

阿里云服务器需要购买,但是即使最基本的配置,一年租用下来的费用也要200左右,最早在看到这个价格之后,首先选用的是按量付费的方式,这样在不使用的情况下可以关闭服务器,但是后来发现即使不使用并且将服务器关闭了,但服务器后台的费用仍然在扣除,虽然不多(一小时大概1分钱左右),但是时间长了不用的话,白白扣除余额也是挺不爽的。

后来观察到,阿里云对于新用户有一次免费申请云服务器的机会,基础系统配置免费使用一个月,但是需要每天10点准时抢购,抢购的难度也不大,或许本来使用云服务器的个体就很少吧,公司的话应该看不上这基础配置。再有一个更好的消息就是新用户免费服务器用完续费的话首年年费是99元,之后就恢复原价,我看到的2年的年费大概600左右,所以首年的年费99元还是相当划算了。

阿里云服务器购买的过程主要以图片形式进行介绍,步骤如下:

  1. 首先注册一个阿里云的账号,由于阿里云与淘宝是一个机构,所以我使用的淘宝账号进行登陆。
  2. 登陆账号之后进入主界面,点击“创建实例”来选购一个服务器。

 

图 9阿里云创建服务器实例
  1. 进入创建实例的页面以后,根据自己的需求选择处理器能力、区域以及操作系统等,在此,我们可以看出每一月的费用都要200+。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值