# MQTT智能家居系统 **Repository Path**: hu-zi-han/mqtt-smart-home-system ## Basic Information - **Project Name**: MQTT智能家居系统 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-19 - **Last Updated**: 2025-04-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于MQTT的智能家居系统 ### 介绍 基于GEC6818开发板软件平台,使用阿里云ubuntu22.04作为MQTT broker,使用MQTTX作为另外的发布者或订阅者的智能家居系统 ### 软件架构 ![软件架构](./assets/mqtt.png) --- ### 前置准备(openssl/cJSON/mosquitto库的移植) **在本项目目录`graft`中准备了以下用到的压缩包,也可以自行下载相关文件** #### 一、编译openssl 1. 解压openssl-1.1.1(可以是其它版本) ``` // 在任意路径下创建文件夹 mkdir openssl cd openssl // 在文件夹中解压openssl的源文件压缩包 tar -vxf openssl-1.1.1q.tar.gz cd openssl-1.1.1q ``` 2. 配置安装目录并生成Makefile文件 ``` ./config no-asm -shared --prefix=/home/你的家目录/linux/arm-lib/openssl ``` 3. 进入Makefile文件,将编译工具修改为交叉编译链,修改的地方如下 ``` PLATFORM=arm CROSS_COMPILE=arm-linux- ``` ![修改openssl的Makefile文件](./assets/openssl-platform.png) ![修改openssl的Makefile文件](./assets/openssl_cross_compile.png) 4. 由于ARM基本的都是32位,所以需要Makefile文件中的‘-m64’删除,如下图所示 ![修改openssl的Makefile文件](./assets/openssl_flags.png) 5. 执行make编译并执行make install安装openssl库 ``` make -j make install ``` 安装完成后在`/home/你的家目录/linux/arm-lib/openssl`目录下会生成以下文件 ![修改openssl的Makefile文件](./assets/openssl_dir.png) #### 二、编译cJSON 1. 解压(可以是其它版本) ``` unzip cJSON-master.zip cd cJSON-master ``` 2. 修改cJSON的Makefile文件 ``` PREFIX ?= /home/你的家目录/linux/arm-lib/openssl ``` ``` CC = arm-linux-gcc ``` ![修改cJSON的Makefile文件](./assets/cjson.png) 3. 编译并安装 ``` make -j make install ``` #### 三、编译mosquitto 1. 解压mosquitto-2.0.9(可以是其它版本) ``` // 在任意路径下创建文件夹 mkdir mosquitto cd mosquitto // 在文件夹中解压openssl的源文件压缩包 tar -vxf mosquitto-2.0.9.tar.gz cd mosquitto-2.0.9 ``` 2. 修改config.mk配置文件 - **添加**安装路径和openssl库路径 ``` WITH_UUID:=no CC=arm-linux-gcc CXX=arm-linux-g++ prefix=/home/你的家目录/linux/arm-lib/mosquitto CFLAGS:=-I/home/你的家目录/linux/arm-lib/openssl/include LDFLAGS=-L/home/你的家目录/linux/arm-lib/openssl/lib -lssl -lcrypto ``` ![修改mosquitto的Makefile文件](./assets/mosquitto_add.png) - 修改配置项 ![修改mosquitto的Makefile文件](./assets/moquitto_mod.png) 3. 编译并安装 ``` make -j make install ``` - **不要用sudo进行编译 不然会修改一些必要的软件导致环境系统的工具无法正常工作** - **出现此错误信息是正常现象** ![修改mosquitto的Makefile文件](./assets/mosquitto_error.png) #### 四、移植到开发板 1. 拷贝openssl,在开发版的‘/usr/local’路径下创建‘ssl’文件,然后将之前编译好的openssl的目录中的`bin`目录和`lib`目录拷贝到开发板ssl目录中 ``` cd /usr/local sudo mkdir ssl ``` ![移植openssl库](./assets/arm_openssl.png) 2. 拷贝mosquitto文件,同样的方式创建‘mosquitto’文件,然后将之前编译mosquitto的目录中`bin`目录、`sbin`目录和`lib`目录拷贝到开发板的mosquitto目录中 ``` sudo mkdir mosquitto ``` ![移植openssl库](./assets/arm_mosquitto.png) 3. 配置环境路径 - 进入全局配置脚本文件 ``` cd /etc/profile vi profile ``` - 将以下配置添加到`profile`脚本文件中 ``` #matt start export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mosquitto/lib export PATH=$PATH:/usr/local/ssl/bin export PATH=$PATH:/usr/local/mosquitto/bin export PATH=$PATH:/usr/local/mosquitto/sbin ``` ![配置环境路径](./assets/arm_profile.png) 4. 使环境路径生效 ``` source /etc/profile ``` **至此所需arm版本库文件移植已完成** *参考 arm移植mosquitto博客* --- #### 注意事项 - 运行可执行文件时可能会出现无法识别库文件路径的问题 ![配置环境路径](./assets/lib_error.png) - 此时需要将库文件链接到`usr/bin/lib`目录下 ![配置环境路径](./assets/link.png) - 以下库文件都需要链接 ``` ln -s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1 ln -s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1 ln -s /usr/local/ssl/lib/libcjson.so.1 /usr/lib/libcjson.so.1 ln -s /usr/local/mosquitto/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1 ``` --- ### 阿里云服务器启动mosquitto #### 一、启动端口号`1883`,此时开发板作为发布者,MQTTX作为订阅者 ##### 1. 拷贝配置文件`mosquitto.conf.example` ``` cp /etc/mosquitto/mosquitto.conf.example ~/mosquitto.conf.1883 ``` ##### 2. 关闭防火墙并添加端口号 - 关闭防火墙 ``` allow_anonymous true ``` ![关闭mosquitto防火墙](./assets/mosquitto_anonymous.png) - 添加端口号 ``` listener 1883 ``` ![添加端口号](./assets/mosquitto_1883.png) ##### 3. 启动`1883`端口的服务器 ``` mosquitto -c mosquitto.config.1883 ``` #### 二、启动端口号`1884`,此时开发板作为订阅者,MQTTX作为发布者 ##### 1. 拷贝配置文件`mosquitto.conf.example` ``` cp /etc/mosquitto/mosquitto.conf.example ~/mosquitto.conf.1884 ``` ##### 2. 关闭防火墙并添加端口号 - 关闭防火墙 ``` allow_anonymous true ``` ![关闭mosquitto防火墙](./assets/mosquitto_anonymous.png) - 添加端口号 ``` listener 1884 ``` ![添加端口号](./assets/mosquitto_1884.png) ##### 3. 启动`1884`端口的服务器 ``` mosquitto -c mosquitto.config.1884 ``` --- ### MQTTX连接阿里云上的mosquitto broker #### 一、MQTTX作为订阅者 ##### 1. 连接服务器 ![MQTTX作为订阅者连接](./assets/mqttx_1883.png) ##### 2. 订阅以下主题 ![MQTTX订阅主题](./assets/mosquitto_topic.png) **此时MQTTX就可以收到开发板发布的信息了** #### 二、MQTTX作为发布者 ##### 1. 连接服务器 ![MQTTX作为订阅者连接](./assets/mqttx_1884.png) **此时MQTTX就可以发送信息控制开发板了(可发布消息的主题与上面1883端口订阅的主题相同)** --- ### 编译开发版的可执行文件 ##### 1.在项目的Makefile中追加所需的头文件路径 ``` CFLAGS += -I/home/你的家目录/linux/arm-lib/mosquitto/include -I/home/你的家目录/linux/arm-lib/openssl/include/cjson ``` ![追加头文件](./assets/makefile_include.png) ##### 2.在项目的Makefile中追加所需的库文件路径 ``` LDFLAGS += -L/home/你的家目录/linux/arm-lib/mosquitto/lib -lmosquitto -L/home/你的家目录/linux/arm-lib/openssl/lib -lssl -lcrypto -lcjson ``` ![追加库文件](./assets/makefile_lib.png) ##### 3.编译出arm版本的可执行文件并放入开发板 - **注:可以通过修改Makefile文件编译出运行在SDL模拟器上的可执行文件** ``` make -j ```