源碼鏈接:
https://gitee.com/hejinlv/ESP32_PHP_MYSQL
ESP32 POST 數據到PHP, 並通過PHP修改mysql內容與顯示
軟件架構
ESP32 MicroPython
安裝教程
- Win安裝phpstudy 或者 樹莓派安裝 php + mysql-server + nginx 或者放至雲服務器
- 將esp-data.php post-esp-data.php 放入服務器主目錄
- EPS32下載ESP32.py
- 數據庫導入SensorData_Table.sql文件或者新建一個表
使用說明
ESP32代碼:
from mpython import * import network import urequests import json import time my_wifi = wifi() my_wifi.connectWiFi("CMCC-GoodMaker", "steam666") num = 0 if my_wifi.sta.isconnected(): oled.fill(0) oled.DispChar("連接成功", 0, 0, 1) oled.DispChar((str(my_wifi.sta.ifconfig()[0])), 0, 16, 1) oled.show() else: oled.fill(0) oled.DispChar("連接失敗", 0, 0, 1) oled.show() while True: _response = urequests.post("http://192.168.1.6/post-esp-data.php/", headers={"Content-Type":"application/json"}, data=json.dumps({"api_key":"tPmAT5Ab3j7F9", "sensor":"Light", "location":"Office", "value1":str(light.read()), "value2":str(sound.read()), "value3":"3", "id":str(num + 1)})) print(_response.text) time.sleep(3)
PHP接收post,解析json,更新數據庫代碼:
<?php $servername = "localhost"; //數據庫地址 // 數據庫名 $dbname = "bak"; // 數據庫用戶名 $username = "root"; // 數據庫密碼 $password = "123456"; //保持此API密鑰值與項目頁面中提供的ESP32代碼兼容。 //如果您更改此值,則ESP32草圖需要匹配 $api_key_value = "tPmAT5Ab3j7F9"; $api_key= $sensor = $location = $value1 = $value2 = $value3 = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $read_post = file_get_contents('php://input'); $datas=json_decode($read_post, true); $api_key = $datas['api_key']; if($api_key == $api_key_value) { $sensor = $datas['sensor']; $location =$datas['location']; $value1 = $datas['value1']; $value2 = $datas['value2']; $value3 = $datas['value3']; $id = $datas['id']; // 創建數據庫連接 $conn = new mysqli($servername, $username, $password, $dbname); // 檢查數據庫連接狀態 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } //插入一個新的數據行 //$sql = "INSERT INTO SensorData ( id, sensor, location, value1, value2, value3) //VALUES ('" . $id . "', '" . $sensor . "', '" . $location . "', '" . $value1 . "', '" . $value2 . "', '" . $value3 . "')"; //更新表中內容 $sql = mysqli_query($conn,"UPDATE SensorData SET value1 = '".$value1."',value2 = '".$value2."' WHERE sensor='Light'"); //如果數據修改成功 if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } $conn->close(); } else { echo "Wrong API Key provided.<br/>"; } } else { echo "No data posted with HTTP POST.<br/>"; } ?>
PHP數據庫查詢,顯示代碼:
<!DOCTYPE html> <html><body> <?php $servername = "localhost"; // 數據庫名 $dbname = "bak"; // 數據庫用戶名 $username = "root"; // 數據庫密碼 $password = "123456"; // 創建數據庫連接 $conn = new mysqli($servername, $username, $password, $dbname); // 檢查數據庫連接狀態 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } //查詢數據庫bak SensorData表中的內容 $sql = "SELECT id, sensor, location, value1, value2, value3, reading_time FROM SensorData ORDER BY id DESC"; echo '<table cellspacing="5" cellpadding="5"> <tr> <td>ID</td> <td>Sensor</td> <td>Location</td> <td>Value 1</td> <td>Value 2</td> <td>Value 3</td> <td>Timestamp</td> </tr>'; if ($result = $conn->query($sql)) { while ($row = $result->fetch_assoc()) { $row_id = $row["id"]; $row_sensor = $row["sensor"]; $row_location = $row["location"]; $row_value1 = $row["value1"]; $row_value2 = $row["value2"]; $row_value3 = $row["value3"]; $row_reading_time = $row["reading_time"]; echo '<tr> <td>' . $row_id . '</td> <td>' . $row_sensor . '</td> <td>' . $row_location . '</td> <td>' . $row_value1 . '</td> <td>' . $row_value2 . '</td> <td>' . $row_value3 . '</td> <td>' . $row_reading_time . '</td> </tr>'; } $result->free(); } $conn->close(); //<!--JS 頁面自動刷新 --> echo ("<script type=\"text/javascript\">"); echo ("function fresh_page()"); echo ("{"); echo ("window.location.reload();"); echo ("}"); echo ("setTimeout('fresh_page()',3000);"); //3秒刷新一次 echo ("</script>"); ?> </table> </body> </html>
參考:
https://randomnerdtutorials.com/esp32-esp8266-mysql-database-php/