2017-04-17 91 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"); 
    }