2017-04-17 86 views
-2

我目前有問題從溫度傳感器收集數據到我的樹莓派。 Pi說它沒有收到任何數據。我也不確定GET和POST是如何工作的。我對這個東西相當新,所以任何幫助將不勝感激。NodeMCU溫度讀數到樹莓派無線

也可以有人檢討我的sendTemperatureTS方法和我的PHP代碼,因爲正如我所說我是新來的這個。順便說一下,我在Raspberry Pi的/ var/www的PHP文件夾中創建了我的PHP文件。我用命令sudo nano collectdata.php在PHP文件夾寫我的代碼

爲NodeMCU

的Arduino代碼:

#include <ESP8266WiFi.h> 
#include <OneWire.h> 
#include <DallasTemperature.h> 

#define myPeriodic 15 //in sec | Thingspeak pub is 15sec 
#define ONE_WIRE_BUS 2 // DS18B20 on arduino pin2 corresponds to D4 on physical board 

OneWire oneWire(ONE_WIRE_BUS); 
DallasTemperature DS18B20(&oneWire); 
float prevTemp = 0; 
const char* server = "172.168.2.143"; 
const char* MY_SSID = "AkhuogTkhbbEjhbuvouvr7i2"; 
const char* MY_PWD = "2pkpmbipsrbeirbp3niag%"; 
int sent = 0; 

void setup() { 
    Serial.begin(115200); 
    connectWifi(); 
} 

void loop() { 
    float temp; 
    //char buffer[10]; 
    DS18B20.requestTemperatures(); 
    temp = DS18B20.getTempCByIndex(0); 
    //String tempC = dtostrf(temp, 4, 1, buffer);//handled in sendTemp() 
    Serial.print(String(sent)+" Temperature: "); 
    Serial.println(temp); 

    sendTemperatureTS(temp); 
    int count = myPeriodic; 
    while(count--) 
    delay(1000); 
} 

void connectWifi() { 
    Serial.print("Connecting to "+*MY_SSID); 
    WiFi.begin(MY_SSID, MY_PWD); 
    while (WiFi.status() != WL_CONNECTED) { 
    delay(1000); 
    Serial.print("."); 
    } 

    Serial.println(""); 
    Serial.println("Connected"); 
    Serial.println(""); 
}//end connect 

void sendTemperatureTS(float temp) { 
    WiFiClient client; 
    if (client.connect(server, 80)) { 
    Serial.println("WiFi Client connected "); 
    String postStr = "/php/"; 
    postStr += "?temp="; 
    postStr += String(temp); 
    postStr += "\r\n\r\n"; 
    client.print("POST 172.168.2.143/php/collectdata.php HTTP/1.1\n"); 
    client.print("Host: 122.168.2.143\n"); 
    client.print("Connection: close\n"); 
    client.print("Content-Type: application/x-www-form-urlencoded\n"); 
    client.print("Content-Length: "); 
    client.print(postStr.length()); 
    client.print("\n\n"); 
    client.print(postStr); 
    delay(1000); 
    }//end if 
    sent++; 
    client.stop(); 
} 

PHP代碼:

<?php 
$servername = 「172.168.2.143」; 
$username = 「esp8266」; 
$password = 「Tutorial」; 
$dbname = 「esp8266」; 
$temp = $_POST[‘temp’]; 
$conn = mysql_connect(「172.168.2.143」,」esp8266」,」Tutorial」); 
if(!$conn) { 
    die(‘Could not connect: ’ . mysql_error()); 
} 
$datenow = date(‘Y-m-d’); 
$sql = 「INSERT INTO `JSDataTable`(`logdate`,`temperature`) VALUES (\」$datenow\」,\」$temp\」)」; 
$result = mysql_query($sql); 
if(!result) { 
    die(‘Invalid query: ‘ . mysql_error()); 
} 
echo 「<h1>The data has been sent!</h1>」; 
mysql_close($conn); 

>

+0

您的PHP代碼無效。您正在使用錯誤的引號。並找到一個更好的PHP教程。 'mysql_ *'API自7.0.0中刪除以來已被棄用。 –

+0

另外[SQL注入](http://bobby-tables.com/)現在不應該是一件事情。 –

回答

0

在ESP的您有HTTP請求:

client.print("POST /php/collectdata.php HTTP/1.1\n"); 
client.print("Host: 172.168.2.143\n"); 

122.168.2.143是可能的錯誤類型。應該是172.168.2.143。

另外,您可能希望在HTTP請求行中插入\ r \ n。

+0

我做到了,仍然沒有工作 – heyyy

+0

重新檢查在答案中修改的帖子標題。 – cagdas

+0

快速問題。如何修改html代碼以添加用戶輸入。並且該輸入值被指定爲一個變量,如果它超過50個,某些引腳將打開 – heyyy

0
#include <ESP8266WiFi.h> 
    #include <OneWire.h> 
    #include <DallasTemperature.h> 
    #include <WiFiClient.h> 

    #define myPeriodic 15 //in sec | Thingspeak pub is 15sec 
    #define ONE_WIRE_BUS 2 // DS18B20 on arduino pin2 corresponds to D4 on physical board 

    OneWire oneWire(ONE_WIRE_BUS); 
    DallasTemperature DS18B20(&oneWire); 
    float prevTemp = 0; 
    const char* server = "172.168.2.143"; 

    const char* MY_SSID = "AkhuogTkhbbEjhbuvouvr7i2"; 
    const char* MY_PWD = "2pkpmbipsrbeirbp3niag%"; 
    int sent = 0; 

    void setup() { 
     Serial.begin(115200); 
     connectWifi(); 
    } 

    void loop() { 
     float temp; 
     //char buffer[10]; 
     DS18B20.requestTemperatures(); 
     temp = DS18B20.getTempCByIndex(0); 
     //String tempC = dtostrf(temp, 4, 1, buffer);//handled in sendTemp() 
     Serial.print(String(sent)+" Temperature: "); 
     Serial.println(temp); 

     //if (temp != prevTemp) 
     //{ 
     //sendTemperatureTS(temp); 
     //prevTemp = temp; 
     //} 

     sendTemperatureTS(temp); 
     int count = myPeriodic; 
     while(count--) 
     delay(1000); 
    } 

    void connectWifi() 
    { 
     Serial.print("Connecting to "+*MY_SSID); 
     WiFi.begin(MY_SSID, MY_PWD); 
     while (WiFi.status() != WL_CONNECTED) { 
     delay(1000); 
     Serial.print("."); 
     } 

     Serial.println(""); 
     Serial.println("Connected"); 
     Serial.println(""); 
    }//end connect 

    void sendTemperatureTS(float temp) 
    { 
     WiFiClient client; 

     if (client.connect(server, 80)) { 
     Serial.println("WiFi Client connected "); 

     String url = "/collectdata.php?"; 
    url += "&temp="; 
    url += temp; 
    client.print(String("GET ") + url + " HTTP/1.1\r\n" + 
       "Server: " + server + "\r\n" + 
       "Connection: close\r\n\r\n"); 
    }