MQTT是一種輕量級的發布/訂閱消息傳輸協議,其主要應用場景是物聯網領域。在應用程序中,我們需要把從物聯網設備采集到的數據存儲到數據庫中,而MySQL是一種常用的開源數據庫。那么,如何使用MQTT協議將數據存儲到MySQL中呢?
下面我們來一步步介紹:
// 導入依賴 const mqtt = require('mqtt') const mysql = require('mysql') // MQTT broker地址 const MQTT_HOST = process.env.MQTT_HOST || 'tcp://localhost:1883' // MySQL配置信息 const MYSQL_HOST = process.env.MYSQL_HOST || 'localhost' const MYSQL_PORT = process.env.MYSQL_PORT || 3306 const MYSQL_USER = process.env.MYSQL_USER || 'root' const MYSQL_PASS = process.env.MYSQL_PASS || 'root' const MYSQL_DB = process.env.MYSQL_DB || 'mqtt_data' // 連接MySQL const connection = mysql.createConnection({ host: MYSQL_HOST, port: MYSQL_PORT, user: MYSQL_USER, password: MYSQL_PASS, database: MYSQL_DB }) connection.connect((err) =>{ if (err) { console.error('MySQL connection failed: ' + err.stack) return } console.log('Connected to MySQL server.') }) // 連接MQTT broker const client = mqtt.connect(MQTT_HOST) // 訂閱主題 client.on('connect', () =>{ console.log('Connected to MQTT broker.') client.subscribe('sensor_data', (err) =>{ if (err) { console.error('Failed to subscribe: ' + err) } else { console.log('Subscribed to topic: sensor_data') } }) }) // 接收消息 client.on('message', (topic, message) =>{ const data = JSON.parse(message.toString()) // 將數據存儲到MySQL const sql = 'INSERT INTO sensor_data (device_id, temperature, humidity) VALUES (?, ?, ?)' connection.query(sql, [data.device_id, data.temperature, data.humidity], (err, result) =>{ if (err) { console.error('Failed to insert data: ' + err) } else { console.log('Data inserted: ' + JSON.stringify(data)) } }) })
代碼中,我們首先導入MQTT和MySQL的依賴庫。然后,分別設置MQTT broker地址和MySQL的配置信息,創建MySQL連接,連接MQTT broker,并訂閱主題。接著,當收到消息時,我們將其解析為JSON格式,構造SQL語句,并執行INSERT操作,將數據存儲到MySQL中。
這樣,我們就使用MQTT協議將數據存儲到MySQL中,完成了物聯網數據的采集和存儲。