iT邦幫忙

0

我不知道如何使用 Arduino 將感測器數據從給到Raspberry Pi 中的php並發送到 MySQL 服務器

  • 分享至 

  • xImage

我最近想將DHT11的數據存到raspberry中的php並且傳給mysql,可是一直到沒連接到raspberry中的php檔
我想請問我少寫了什麼嗎?
我使用的開發板是Linkit7697https://ithelp.ithome.com.tw/upload/images/20221223/20153649uZ3LNBHPiR.pnghttps://ithelp.ithome.com.tw/upload/images/20221223/201536496svsErAA3Q.pnghttps://ithelp.ithome.com.tw/upload/images/20221223/20153649fkvaYIaW54.png
以下是Arduino IDE的code

#include <LWiFi.h>
#include <DHT.h>

char _lwifi_ssid[] = "";//wifi_id
char _lwifi_pass[] = "";//wifi_pass
WiFiClient client;
char server[] = "192.168.0.11";   //eg: 192.168.0.222
//IPAddress ip(192,168,0,11);
String str;
DHT dht11_p2(2, DHT11);


void setup() {
  // put your setup code here, to run once:
Serial.begin(115200);
  while (!Serial);
  WiFi.begin(_lwifi_ssid,_lwifi_pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
}

void loop() {
  // put your main code here, to run repeatedly:
  //以下溫溼度建立
  Serial.print("溫度:");
  Serial.println(dht11_p2.readTemperature());
  Serial.print("濕度:");
  Serial.println(dht11_p2.readHumidity());
  
  str = String("http://192.168.0.11/dht11.php?temperature=") + String(dht11_p2.readTemperature()) + String("&humidity=") + String(dht11_p2.readHumidity());
  //Serial3.println(str);
  Serial.println(str);

  receiveData();
  Serial.println(str);
  Sending_To_phpmyadmindatabase();
  //if (Serial.available())  {
  //Serial.write(Serial.read());
  //}
  delay(5000);
}

void receiveData()  {
  str = "";
  char c;
  while (Serial.available()) {
    if ((c = Serial.read()) != EOF) {
      str += c;
    }
  }
}

void Sending_To_phpmyadmindatabase()  { //CONNECTING WITH MYSQL
  if (!client.connect(server, 80)) {
    Serial.println("connection failed!");
    return;                //return在程序中有退出loop函數的作用,不過loop函數會再次運行
  }
  client.print("GET ");
  client.print(str);
  client.print(" ");      //SPACE BEFORE HTTP/1.1
  client.print("HTTP/1.1");
  client.println();
  client.println("Host:192.168.0.11");
  client.println("Connection: close");
  client.println();

}

以下是raspberry中php檔的code

<?php
class data{
 public $link='';
 function __construct($temperature, $humidity){
  $this->connect();
  $this->storeInDB($temperature, $humidity);
 }

 function connect(){
  $this->link = mysqli_connect('localhost','ASL111','qaws') or die('Cannot connect to the DB');
  mysqli_select_db($this->link,'temphumid1') or die('Cannot select the DB');
 }

 function storeInDB($temperature, $humidity){
  $query = "insert into surroundings set humidity='".$humidity."', temperature='".$temperature."'>
  $result = mysqli_query($this->link,$query) or die('Errant query:  '.$query);
 }

}
if($_GET['temperature'] != '' and  $_GET['humidity'] != ''){
 $data=new data($_GET['temperature'],$_GET['humidity']);
}

?>

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2

先糾正你的說詞一下。

phpmyadmin不是資料庫,而是一個控管資料庫的管理器。
所以「無法存入phpmyadmin」這個說詞是不對的。
因該是「無法存入資料庫」

再來,你的程式碼用圖片。很難COPY下來查看程式碼。
所以得先用說的。

你要先確定你的程式碼,能正常連結資料庫。
由於你用圖片且很模糊。我無法幫你查看程式碼中哪邊有問題。

你就先自行檢查處理是否資料庫連結有異常。
如使用了ROOT帳號做遠程連結。
只要是非用 localhost 或 127.0.0.1,都是視為遠程連結。

現在的資料庫大多預設有做ROOT不允行遠程連結的特性。(除非有特別去做調整)

aslzoro iT邦新手 5 級 ‧ 2022-12-24 22:59:16 檢舉

我資料庫的帳號是用自己建立的帳號做的。
我已經間code補充上去了,我還需要準備甚麼嗎?
我第一次在這請教不太清楚要準備甚麼。

aslzoro iT邦新手 5 級 ‧ 2023-01-27 16:14:09 檢舉

我是用自己重新新增一個的使用者帳戶並不是用root帳號
,我也將mysqld.cnf文件內的bind-address = 127.0.0.1這行註解掉了。不過還是無法將數據傳進mysql。

我要發表回答

立即登入回答