MQTT保护环境的画 一等奖如何搭建

mosquitto(mqtt)服务部署+redis 认证模块
物联网交流群:
运行的环境(系统版本,mosquitto版本,redis版本)
1.centos6.5 及以上.
2.mosquitto-1.4.9
3.redis 3.0.1
部署准备(外部依赖)
2.c-ares-devel
3.libc-ares2
4.libuuid-devel
配置文件的说明
部署环境搭建步骤
0.安装redis
wget http://download.redis.io/releases/redis-3.0.1.tar.gz
tar xzf redis-3.0.1.tar.gz
cd redis-3.0.1
make && make install
mkdir /etc/redis && cp redis.conf /etc/redis/6379.conf
vim /etc/redis/6379.conf
daemonize yes
修改 redis 的启动脚步
vim utils/redis_init_script
把原注释替换为
# chkconfig:
# description: Redis is a persistent key-value database
设置开机启动
cp utils/redis_init_script /etc/init.d/redisd
chkconfig redisd on
1.安装外部依赖
1.1 yum 安装依赖
yum install openssl-devel
yum install c-ares-devel
yum install libuuid-devel
yum install gcc*
1.2 编译安装hiredis客户端
1.2.1 下载tar.gz文件
wget https://github.com/redis/hiredis/archive/v0.13.3.tar.gz
1.2.2 解压编译安装
tar -zxvf v0.13.3.tar.gz
cd hiredis-0.13.3
make install
2.安装mosquitto实例:
2.1 下载tar.gz文件
wget https://mosquitto.org/files/source/mosquitto-1.4.9.tar.gz
tar -zxvf mosquitto-1.4.9.tar.gz
2.3 进入安装目录
cd mosquitto-1.4.9
sudo make install
2.5 加载.so.1文件
vim /etc/ld.so.conf.d/user.conf
加入内容:
/usr/local/lib
加载以上配置
2.6 更新动态链接库
sudo ldconfig
2.7 增加mosquitto用户
adduser mosquitto
2.8 测试mosquitto安装
启动mosquitto
mosquitto -c mosquitto.conf
使用"功能验证建议"中的工具进行连接测试
3.安装redis认证插件
3.1 下载tar.gz
wget https://github.com/jpmens/mosquitto-auth-plug/archive/0.1.2.tar.gz
3.2 解压,修改配置
tar -zxvf 0.1.2.tar.gz
cd mosquitto-auth-plug-0.1.2
cp config.mk.in config.mk
3.3 编辑config.mk指定开启redis,mosquitto源码目录
vim config.mk
修改如下配置项:
BACKEND_MYSQL ?= no
BACKEND_REDIS ?= yes
MOSQUITTO_SRC = /usr/local/mosquitto-env/mosquitto-1.4.9/src
3.4 mosquitto目录下创建plugin目录
mkdir plugin
3.5 将插件中的.so文件复制到plugin目录下
cp auth-plug.so mosquitto/plugin
3.6 修改mosquitto的配置文件
vim mosquitto.conf
修改如下配置项
allow_anonymous false
在这一行下新增
auth_plugin /usr/local/mosquitto-env/mosquitto-1.4.9/plugin/auth-plug.so
auth_opt_backends redis
auth_opt_redis_host 192.168.25.162
auth_opt_redis_port 6379
auth_opt_redis_userquery GET %s
3.7 在认证插件中使用np.c文件生成密码(例如,密码是admin的加密方式如下)
./np -p admin
得到输出: PBKDF2$sha256$901$lzMxwbgXSoPWfG3U$J/UVQWp39U8AQWpaOZhO/Rf6hlqVogm0
3.8 将用户名和加密后的密码添加到redis中
set admin PBKDF2$sha256$901$lzMxwbgXSoPWfG3U$J/UVQWp39U8AQWpaOZhO/Rf6hlqVogm0
相关注意事项
功能验证建议
1.根据如下url下载不同操作系统下的mosquitto图形化客户端工具
https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/org.eclipse.paho.ui.app/1.1.1/
2. 新建连接
连接地址:tcp://url:port(默认端口为1883)
输入用户名密码 admin admin
连接,连接成功即完成搭建
MQTT服务器搭建--Mosquitto用户名密码配置
使用MQTT协议+Redis缓存实现APP登录顶号功能
utuntu14.04 安装mosquitto-auth-plug(redis以及mongodb)遇到的问题
mosquitto 使用时出现的一些问题及其解决办法
修改mosquitto-auth-plug的Redis支持模块
emqttd介绍和集群安装
EMQTT测试--压力测试
制作包含redis和mqtt的Docker镜像-支持多服务
ubuntu 使用docker运行redis
没有更多推荐了,windows环境下mosquitto环境搭建与mqtt测试
版权声明:本文为博主pgpanda的原创文章,未经博主允许不得转载
工作需求,自己在windows下搭建了一个mosquitto环境测试mqtt
话不多说,直接上过程
环境为windows64bit
因为官网上已经找不到mosquitto的windows64位下载了,还是花了一番功夫
下载链接,mosquitto64位版与Cygwin64位版:
链接:http://pan.baidu.com/s/1o8Swnv8 密码:si95
链接:http://pan.baidu.com/s/1dEW2eq9 密码:myj1
一、安装Cygwin
安装过程网上很多,这里就不重复描述了
需要注意的一个地方,安装过程中选择源会报错
Unable to get setup.ini from &http://mirrors.163.com/cygwin/&
进入源网站http://mirrors.163.com/cygwin/
发现变成了这样,不是单一源
在添加源URL的时候变成http://mirrors.163.com/cygwin/x86_64即可
国内一般使用的是163的源文件
这里提供官网上提供给源的下载地址,笔者没有下载过,也无法验证
https://cygwin.com/mirrors.html
二、安装mosquitto
通过文件直接安装即可
在本例中,发布者、订阅者和服务器均为localhost,实际情况下三者并不是一个设备
启动broker
windows下使用命令提示符,进入mosquitto安装目录
输入命令 mosquitto -c mosquitto.conf
无提示信息,表示mqtt的broker端已经启动
保持broker启动,打开两个命令窗口测试发布与订阅
mosquitto_sub -v -t topicTest01
-v:打印更多调试信息
-t:指定主题,此处为topicTest01
mosquitto_pub -t topicTest01 -m TestMessage
-t:指定主题
-m:指定消息内容
测试结果:
发布消息后,订阅这收到了主题为topicTest01的TestMessage消息
windows7-64bit环境下mosquitto环境搭建完成
下一步准备性能测试
mosquitto64位版与Cygwin64位版
【MQTT】在Windows下搭建MQTT服务器
mqtt C客户端
Windows环境下搭建MosQuitto服务器
MQTT的学习研究(十六) MQTT的Mosquitto的window安装部署
windows MQTT客户端
MQTT(二)在windows64位上安装Python环境、pip、paho-mqtt
MQTT服务器的搭建(Windows平台)
openssl + mosquitto + windows (x64)
没有更多推荐了,MQTT,是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器和控制设备:
轻量级的消息订阅和发布(publish/subscribe)协议
建立在TCP/IP协议之上
IoT,internet of things,物联网,MQTT在这方面应用较多。
MQTT协议是针对如下情况设计的:
M2M(Machine to Machine) communication,机器端到端通信,比如传感器之间的数据通讯
因为是Machine to Machine,需要考虑:
Machine,或者叫设备,比如温度传感器,硬件能力很弱,协议要考虑尽量小的资源消耗,比如计算能力和存储等
M2M可能是无线连接,网络不稳定,带宽也比较小
MQTT协议的架构,用一个示例说明。比如有1个温度传感器(1个Machine),2个小的显示屏(2个Machine),显示屏要显示温度传感器的温度值。
显示器需要先通过MQTT协议subscribe(订阅)一个比如叫temperature的topic(主题):
当温度传感器publish(发布)温度数据,显示器就可以收到了:
注:以上两张图,取自
协议里还有2个主要的角色:
client,客户端
broker,服务器端
它们是通过TCP/IP协议连接的。因为MQTT是协议,所以不能拿来直接用的,就好比HTTP协议一样。需要找实现这个协议的库或者服务器来运行。
MQTT的官网见:。其中里面提供了官方推荐的各种服务器和客户端使用的各种语言版本的API。
下面以服务器apache-apollo-1.7.1为例,在windows环境下测试。
1、在下载Apollo服务器,下载后解压。如下图所示:
bin下包含apollo和apollo.cmd两个文件:
2、运行apache-apollo-1.7.1\bin\apollo.cmd,输入create mybroker(名字任意取,这里是根据介绍的来取的)创建服务器实例,服务器实例包含了所有的配置,运行时数据等,并且和一个服务器进程关联。如果双击apollo.cmd出现闪一下就关闭的情况,则需要在命令行中敲入命令:
create mybroker之后会在bin目录下生成mybroker文件夹。
里面包含有很多信息,其中etc\apollo.xml文件下是配置服务器信息的文件,etc\users.properties文件包含连接MQTT服务器时用到的用户名和密码,后面会介绍,可以修改原始的admin=password,可以接着换行添加新的用户名密码。
3、打开cmd,运行apache-apollo-1.7.1\bin\mybroker\bin\apollo-broker.cmd run 开启服务器,如下图:
可以在浏览器中输入,其自动转入:http://127.0.0.1:61680/console/index.html,apollo的登录页面。
此界面表示已经安装成功:该登录的用户名和密码在\apache-apollo-1.7.1\bin\mybroker\etc\users.properties里,打开users.properties文件:
  ## ---------------------------------------------------------------------------  ## Licensed to the Apache Software Foundation (ASF) under one or more  ## contributor license agreements.
See the NOTICE file distributed with  ## this work for additional information regarding copyright ownership.  ## The ASF licenses this file to You under the Apache License, Version 2.0  ## (the "License"); you may not use this file except in compliance with  ## the License.
You may obtain a copy of the License at  ##  ## http://www.apache.org/licenses/LICENSE-2.0  ##  ## Unless required by applicable law or agreed to in writing, software  ## distributed under the License is distributed on an "AS IS" BASIS,  ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  ## See the License for the specific language governing permissions and  ## limitations under the License.  ## ---------------------------------------------------------------------------
  #  # The list of users that can login.
This file supports both plain text or  # encrypted passwords.
Here is an example what an encrypted password  # would look like:  #  # admin=ENC(Cf3Jf3tM+UrSOoaKU50od5CuBa8rxjoL)  #
  admin=password
经过上面的简单步骤,服务器基本上就已经完成。输入admin,password就可以登录了,如下图:
用来通信的具体代码,在下文中(http://www.cnblogs.com/chenrunlin/p/5109028.html)会给出具体实现。
阅读(...) 评论()MQTT环境如何搭建? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。2被浏览784分享邀请回答赞同 添加评论分享收藏感谢收起写回答授之以鱼不如授之以渔
【ESP8266】ESP8266的MQTT客户端搭建教程(基于NONS_SDK_v2.0)
MQTT是IBM开发的一个即时通讯协议,面向M2M和物联网的连接,采用轻量级发布和订阅消息传输机制,并且有可能成为物联网的重要组成部分。
ESP8266是一款物美价廉的Wi-Fi芯片,集成Tensilica L106
钻石系列的32 位处理器和片上SRAM,多达17 个GPIO口,并拥有IIC、IIS、UART、PWM、IR遥控等片上资源。
ESP8266还提供官方的软件开发开发包(SDK),目前最新版本是「ESP8266 NONOS SDK V2.0.0」。
这篇文章主要讲解如何使用ESP8266(基于NONS_SDK_v2.0)作为MQTT客户端,并连上在本地电脑搭建的MQTT服务器。
首先简单说明一下博主的开发环境:
ESP8266开发环境:
ESP8266 SDK版本:esp8266_nonos_sdk_v2.0.0_16_08_10_0
MQTT服务器:Apollo 1.7.1(本地搭建)
操作系统:64位 Win10系统
ESP8266开发板:NodeMCU(4MB Flash)
阅读本教程时,如果有使用esp8266_nonos_sdk_v2.0.0的开发经验,会更轻松的使用本教程。如果遇到代码编译出错、烧写下载不行以及下载后出现异常的问题,请先参考其他资料再继续本文。
本教程基于ESP8266 IDE 2.0,如果读者使用一样的环境,那么步骤1~4就好理解了,不是的话直接看图片和步骤5:
在IDE环境中通过「File」-&「Import」;
弹窗中选择「C/C++」-&「Existing Code as Makefile project」;
下一步「Browse…」,编译器选择「Cygwin GCC」;
之后导入的工程目录如上图,其中给「dirver_lib」文件下面的Makeflie添加bak后缀或删除掉,免得编译通不过。
从「example」文件夹中拷贝esp_mqtt_proj文件夹到主目录,点击编译按钮,如果成功就完成这一步骤了。
工程目录图。注意红色方块内的文件。
MQTT代码使用简析
示例工程中最重要的是这两个文件:user目录下的user_main.c和inlcude目录下的mqtt_config.h。
其中user_main.c不用说了,玩过ESP8266的朋友都知道这是放主代码的地方,其中user_init函数是SDK提供开发者放置初始化代码的地方。下面主要分析mqtt_config.h。
mqtt_config.h代码清单
#ifndef __MQTT_CONFIG_H__
#define __MQTT_CONFIG_H__
#define CFG_HOLDER
0x00FF55A4
/* Change this value to load default configurations */
#define CFG_LOCATION
/* Please don't change or if you know what you doing */
#define MQTT_SSL_ENABLE
#define MQTT_HOST
"192.168.1.100" //or "mqtt.yourdomain.com"
#define MQTT_PORT
#define MQTT_BUF_SIZE
#define MQTT_KEEPALIVE
/*second*/
#define MQTT_CLIENT_ID
"DVES_%08X"
#define MQTT_USER
"DVES_USER"
#define MQTT_PASS
"DVES_PASS"
#define STA_SSID "DVES_HOME"
#define STA_PASS "yourpassword"
#define STA_TYPE AUTH_WPA2_PSK
#define MQTT_RECONNECT_TIMEOUT
/*second*/
#define DEFAULT_SECURITY
#define QUEUE_BUFFER_SIZE
#define PROTOCOL_NAMEv31
/*MQTT version 3.1 compatible with Mosquitto v0.15*/
#endif // __MQTT_CONFIG_H__
在这个文件中,有几个宏定义可能需要修改的:
MQTT_HOST:MQTT服务器地址
MQTT_PORT:MQTT服务器端口
MQTT_USER:MQTT服务器用户名
MQTT_PASS:MQTT服务器密码
STA_SSID:WI-FI帐号
STA_PASS:WI-FI密码
还有一个最重要的宏定义——CFG_HOLDER,因为这个MQTT示例在ESP8266运行过一次后会把这些信息保存到FLASH中,如果要继续修改这些信息,记得要修改CFG_HOLDER这个宏定义,改成另一个数值即可。
CFG_HOLDER作的用是:在CFG_Load函数中,如果发现从FLASH读取出来的CFG_HOLDER数值和宏定义的不一样,则会更新这些信息,并保存到FLASH中。不修改CFG_HOLDER的话可能会发觉明明用户名和密码都正确但是就是连接不上去。
修改代码及测试
根据上面分析,下面我们就可以修改示例代码:
把STA_SSID和STA_PASS修改为自己的WiFI名和密码;
修改MQTT_USER和MQTT_PASS为对应的MQTT服务器的用户名和密码,Apollo服务器默认是admin和password;
修改MQTT_HOST和MQTT_PORT为MQTT服务器IP和PORT,目前是使用本地的MQTT服务器,所以是修改为自己电脑的IP和61613端口,PORT是整型值;
根据MQTT服务器的协议不同,可能需要使用MQTT v3.1.1版本,所以把PROTOCOL_NAMEv31注释掉,使用PROTOCOL_NAMEv311。源码的PROTOCOL_NAMEv311前面没有#define,自己加上就行。
最后,修改CFG_HOLDER,以让这些配置生效,直接给原来CFG_HOLDER定义的数值加1即可。
编译,查看Console窗口,如果输出
那说明代码已经编译成功。另外要注意,ESP8266 SDK v2.0版本生成的eagle.irom0text.bin烧写起始地址是0x10000,而之前的版本烧写地址是0x40000;eagle.flash.bin还是0x00000。由于博主使用的是4MB Flash的ESP8266,所以也建议读者先确定手头的ESP8266是不是4MB Flash(即32Mbit Flash,注意单位!4MB=32Mbit,Flash一般是以bit计算!)
另外如果Problems窗口报Errors的,只要Console窗口编译通过,就可以不用管。
下载配置,仅供参考:
blank.bin和default.bin烧写一次就行,另外也要留意不同的Flash大小,blank.bin和default.bin烧写地址也不同。
另外,给NodeMCU烧写固件的时候,SPI MODE选项可能要选DIO。详细细节参考。
其他的ESP8266开发板一般则选择默认的QIO就行了。
如果前面一切顺利,打开串口,设置波特率为115200,上电后前面的乱码不用管,之后串口打印信息如下,省略了一部分信息:
default configuration
MQTT_InitConnection
MQTT_InitClient
……(省略)
connected with &WiFi名&, channel 6
dhcp client start...
STATION_IDLE
STATION_IDLE
ip:&ESP8266的IP&,mask:255.255.255.0,gw:&WiFi网关IP&
TCP: Connect to ip
&MQTT服务器IP:PORT&
MQTT: Connected to broker &MQTT服务器IP:PORT&
MQTT: Sending, type: 1, id: 0000
TCP: data received 4 bytes
MQTT: Connected to &MQTT服务器IP:PORT&
MQTT: Connected
MQTT: queue subscribe, topic"/mqtt/topic/0", id: 1
MQTT: queue subscribe, topic"/mqtt/topic/1", id: 2
MQTT: queue subscribe, topic"/mqtt/topic/2", id: 3
MQTT: queuing publish, length: 23, queue size(66/2048)
MQTT: queuing publish, length: 25, queue size(91/2048)
MQTT: queuing publish, length: 25, queue size(118/2048)
其中带尖括号的字段根据测试环境不同而不同。
同时看源码和串口信息可知,ESP8266向MQTT服务器订阅了三个主题,假设使用的是本地搭建的MQTT服务器,那么查看MQTT服务器后台就可以看到:
同时在后台的Connects页面也可以看到ESP8266的链接:
MQTT本地服务器搭建教程Windows版链接在后面。
另外博主已经用ESP8266的MQTT连接上了OneNET云,连接该云需要注释掉下面这条语句,在user_init函数下。
MQTT_InitLWT(&mqttClient, "/lwt", "offline", 0, 0);
原因是OneNET不支持MQTT协议的Will字段,否则可能连接不上。
【MQTT服务器】
MQTT服务器Apollo下载地址:
【ESP8266 IDE】
由于上面提供的ESP8266 IDE下载链接已经失效,笔者这里自己上传了一个,供大家下载:链接:
密码: qyjs
【示例代码】本博客ESP8266端代码下载地址:
【ESP8266资料】
评论统一回复
评论区很多朋友回复上电后打印乱码,我都不知道你们的乱码是怎样的?请确保已经修改了WiFi帐号和密码。同时请确定自己的ESP8266是否是4MB Flash(32Mbit Flash)。(评论区出现好几个这样的情况:第一次烧写后重启成功,之后重启芯片就不行的情况,如果有读者知道原因的希望告知下,谢谢。另,我估计绝对不是本教程的问题。)
上电启动信息默认波特率是76800bps,进入user_init后串口被初始化为115200bps。
如果反复打印STATION_IDLE ,说明没有连上WiFi。
default configuration
MQTT_InitConnection
MQTT_InitClient
System started ...
mode : sta(18:fe:34:**:**:**)
STATION_IDLE
STATION_IDLE
STATION_IDLE
no your_wifi_ssid found, reconnect after 1s
STATION_IDLE
STATION_IDLE
STATION_IDLE
STATION_IDLE
no your_wifi_ssid found, reconnect after 1s
STATION_IDLE
STATION_IDLE
STATION_IDLE
STATION_IDLE
STATION_IDLE
no your_wifi_ssid found, reconnect after 1s
STATION_NO_AP_FOUND
STATION_IDLE
STATION_IDLE
STATION_IDLE
STATION_IDLE
no your_wifi_ssid found, reconnect after 1s
另外一定要注意:ESP8266 SDK v2.0版本生成的文件烧写地址:
eagle.flash.bin
eagle.irom0text.bin
烧写错误会导致芯片不断的重启!请仔细阅读「编译下载」小节。
另外v2.0以下版本的SDK(不包括v2.0)eagle.irom0text.bin是烧写在0x40000,请自行参考其他资料。
关于MQTT的安全连接,在配置文件中和这两个宏定义有关:
#define MQTT_SSL_ENABLE
#define DEFAULT_SECURITY
其中我查看源码,宏定义MQTT_SSL_ENABLE是SSL连接的预编译,如果不定义MQTT_SSL_ENABLE则表示不支持SSL(最好看源码理解)。
DEFAULT_SECURITY是SSL是否使能,0为禁能,1为使能。
esp_mqtt_proj/mqtt/mqtt.c文件下的MQTT_Connect函数部分源码:
void ICACHE_FLASH_ATTR
MQTT_Connect(MQTT_Client *mqttClient)
if (mqttClient-&security)
#ifdef MQTT_SSL_ENABLE
espconn_secure_connect(mqttClient-&pCon);
INFO("TCP: Do not support SSL\r\n");
espconn_connect(mqttClient-&pCon);
其中mqttClient-&security由DEFAULT_SECURITY赋值。在esp_mqtt_proj/modules/config.c的CFG_Load函数里。
sysCfg.security = DEFAULT_SECURITY; /* default non ssl */
最后会在user_init函数初始化。
MQTT_InitConnection(&mqttClient, sysCfg.mqtt_host, sysCfg.mqtt_port, sysCfg.security)
关于烧写后第一次启动正常,之后不断重启的问题
在makefile文件里面把SPI_SIZE_MAP?=0改为SPI_SIZE_MAP?=4。
参见评论区33楼。
关于连接阿里云百度云等
因为这些云平台的mqtt_name和mqtt_pass比较长,而MQTTconfig.h中保存到Flash中的结构体的这些字段不够长,这样就会导致连接不上云平台。解决办法就是手动增大数组大小。(感谢评论区35楼评论者的提醒)
typedef struct{
uint32_t cfg_
uint8_t device_id[32];
uint8_t sta_ssid[64];
uint8_t sta_pwd[64];
uint32_t sta_
uint8_t mqtt_host[64];
uint32_t mqtt_
uint8_t mqtt_user[32];
uint8_t mqtt_pass[32];
uint32_t mqtt_
ESP32 + MQTT 连接到中移动物联网云平台 OneNET
ESP8266模块使用完整教程
Esp8266进阶之路10 【小实战下篇】Windows系统搭建8266的本地Mqtt服务器,局域网点亮一盏LED灯。(带Demo)
MQTT——物联网的神经系统
Esp8266传输数据到MQTT服务器
Esp8266进阶之路12
图文并茂学习阿里云主机搭建8266MQTT服务器,实现移动网络远程控制一盏灯!
ESP8266--MQTT--ESP_MQTT固件开发笔记(一*)小黄板
ESP8266和MQTT
没有更多推荐了,

我要回帖

更多关于 画一幅保护环境的画 的文章

 

随机推荐