基于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 mosquitto
sudo 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”的数据库和一个具有读写权限的用户。我们可以使用以下命令来完成该任务:


数据运维技术 » 基于c语言MQTT和MySQL的智能物联网应用(c mqtt mysql)