基于c语言MQTT和MySQL的智能物联网应用(c mqtt mysql)
基于C语言、MQTT和MySQL的智能物联网应用
随着物联网应用的快速发展,越来越多的设备和系统通过互联网连接。为了更好地管理这些设备和数据,智能物联网应用也越来越受到人们的关注。在这篇文章中,我们将介绍一种基于C语言、MQTT和MySQL的智能物联网应用。
MQTT是一种轻量级的消息传输协议,它可以使设备之间快速、可靠地进行通信。而MySQL则是一种关系型数据库管理系统,它可以方便地存储和管理数据。这两种技术的结合可以建立一个高效的物联网应用。
本文实现一个简单的基于MQTT和MySQL的智能物联网系统,该系统可以通过WiFi网络连接若干个传感器,并将传感器采集到的数据发送到一个云服务器上,并将数据存储到MySQL数据库中。同时,该系统可以通过云服务器向传感器发送命令,控制其工作状态。
该智能物联网系统的基础是一些简单的硬件设备,例如传感器、WiFi模块和单片机。为了方便开发,我们使用了AT指令集,这个指令集允许我们通过串口连接WiFi模块,并使用C语言进行编程。下面是一个简单的C语言程序,它连接到MQTT代理服务器,并订阅一个主题,然后接收和处理传感器数据:
#include
#include
#include
#include "MQTTClient.h"
#define ADDRESS "tcp://localhost:1883"#define CLIENTID "ExampleClientPub"
#define TOPIC "sensors/temperature"#define QOS 1
#define TIMEOUT 10000L
volatile MQTTClient_deliveryToken deliveredtoken;
void delivered(void *context, MQTTClient_deliveryToken dt){
printf("Callback: Message with token value %d delivery confirmed\n", dt); deliveredtoken = dt;
}
int msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message){
char* payloadptr = message->payload; printf("Message arrived! Topic: %s\n", topicName);
printf("Message: %s\n", payloadptr); MQTTClient_freeMessage(&message);
MQTTClient_free(topicName); return 1;
}
int mn(int argc, char* argv[]){
MQTTClient client; MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer; MQTTClient_deliveryToken token;
int rc;
MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
conn_opts.keepAliveInterval = 20; conn_opts.cleansession = 1;
printf("Connecting to broker: %s\n", ADDRESS); rc = MQTTClient_connect(client, &conn_opts);
if (rc != MQTTCLIENT_SUCCESS) {
printf("Fled to connect, return code %d\n", rc); exit(-1);
} printf("Connected!\n");
MQTTClient_subscribe(client, TOPIC, QOS); printf("Subscribed to topic: %s\n", TOPIC);
while (1) {
char payload[20] = "Sensors data"; pubmsg.payload = payload;
pubmsg.payloadlen = strlen(payload); pubmsg.qos = QOS;
pubmsg.retned = 0; MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
printf("Wting for delivery...\n"); rc = MQTTClient_wtForCompletion(client, token, TIMEOUT);
printf("Message with delivery token %d delivered\n", token); sleep(1);
}
MQTTClient_disconnect(client, 10000); MQTTClient_destroy(&client);
return rc;}
上述代码中,我们定义了一个代理服务器的地址、客户端ID和要订阅的主题。程序连接到代理服务器,然后通过MQTTClient_subscribe()来订阅主题,并通过msgarrvd()回调函数处理接收到的消息。程序每1秒钟发送一次传感器数据。
在接收到传感器数据之后,我们需要将其存储到MySQL数据库中。为此,我们需要使用C语言中的MySQL C API,该API提供了访问MySQL数据库的函数。下面是一个示例程序,它可以连接到MySQL服务器,并将传感器数据写入一个名为sensors的表中:
#include
#include
#include
#include
int mn(int argc, char *argv[]) { MYSQL *con = mysql_init(NULL);
if (con == NULL) { fprintf(stderr, "%s\n", mysql_error(con));
exit(1); }
if (mysql_real_connect(con, "localhost", "root", "password", "iot", 0, NULL, 0) == NULL) {
finish_with_error(con); }
if (mysql_query(con, "CREATE TABLE IF NOT EXISTS sensors (" " id INT AUTO_INCREMENT PRIMARY KEY,"
" temperature VARCHAR(255) NOT NULL," " humidity VARCHAR(255) NOT NULL,"
" date TIMESTAMP DEFAULT CURRENT_TIMESTAMP)" )) {
finish_with_error(con); }
if (mysql_query(con, "INSERT INTO sensors (temperature, humidity) VALUES ('23C', '45%')")) { finish_with_error(con);
} mysql_close(con);
exit(0);}
void finish_with_error(MYSQL *con) { fprintf(stderr, "%s\n", mysql_error(con));
mysql_close(con); exit(1);
}
上述程序中,我们使用mysql_init()来初始化一个连接对象,然后通过mysql_real_connect()函数连接到MySQL服务器。接下来,我们创建了一个名为sensors的表,该表存储了传感器数据的温度、湿度和采集时间。
我们已经介绍了如何使用C语言编写MQTT和MySQL的客户端程序,现在我们需要将它们结合起来,以实现一个完整的智能物联网系统。具体来说,我们需要同时运行两个程序:MQTT程序和MySQL程序。MQTT程序通过WiFi模块连接到传感器,并将传感器数据发送到云服务器上。而MySQL程序从云服务器获取传感器数据,并将其存储到MySQL数据库中。下面是整个系统的工作流程示意图:
![智能物联网系统工作流程](https://img-blog.csdnimg.cn/20220114115956643.png)
在实现整个系统之前,我们需要先配置MQTT代理服务器和MySQL服务器,以便让系统能够正常工作。具体来说,我们需要安装Mosquitto和MySQL服务器,并对其进行一些基本的配置。
安装Mosquitto
Mosquitto是一个流行的MQTT消息代理服务器,我们可以使用它来搭建我们的MQTT服务器。我们可以在终端中使用以下命令来安装Mosquitto:
sudo apt-get update
sudo apt-get install mosquittosudo apt-get install mosquitto-clients
安装完成后,我们可以通过以下命令来测试MQTT服务器是否能够正常工作:
mosquitto_sub -h localhost -t "test"
上述命令向MQTT服务器订阅了主题“test”,然后等待接收消息。我们可以在另一个终端中使用以下命令来向MQTT服务器发送消息:
mosquitto_pub -h localhost -t "test" -m "Hello, MQTT"
上述命令向主题“test”发送了一条消息“Hello, MQTT”。如果一切正常,我们应该能够在第一个终端中看到接收到的消息。
安装MySQL服务器
MySQL是一种开源的关系型数据库管理系统,我们可以使用它来存储和管理传感器数据。我们可以在终端中使用以下命令来安装MySQL服务器:
sudo apt-get update
sudo apt-get install mysql-server
安装完成后,我们需要启动MySQL服务器,并对其进行一些基本的配置。具体来说,我们需要创建一个名为“iot”的数据库和一个具有读写权限的用户。我们可以使用以下命令来完成该任务:
“