2017-04-17 4 views
-2

현재 온도 센서에서 수집 한 데이터를 내 Raspberry Pi로 보내는 데 문제가 있습니다. Pi는 데이터를받지 못했다고 말합니다. GET과 POST가 어떻게 작동하는지 잘 모르겠습니다. 나는이 물건에 상당히 새롭다. 그래서 어떤 도움이라도 많이 인정 될 것이다.NodeScreen 온도 측정 값을 라즈베리 파이 무선으로 변환

또한 누군가 내가 내 sendTemperatureTS 메서드와 PHP 코드를 검토 할 수 있습니까? 그런데 나는 라스베리 파이의/var/www에있는 PHP 폴더에 PHP 파일을 만들었습니다. 나는 내 코드를 작성하기 위해 PHP 폴더에 명령 sudo nano collectdata.php을 사용

NodeMCU에 대한

아두 이노 코드 :.

#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에서 제거 된 5.5.0부터 사용되지 않습니다. –

+0

또한 [SQL injection] (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"); 
    }