php - 将数据从 Arduino 发布到网站

标签 php c http arduino http-post

我正在做一个项目,我试图使用 HTTP 和 POST 方法将数据从我的 Arduino Mega2560 发送到我在本地主机上托管的网站。我住在学生宿舍,因此无法使用路由器。但是,我买了一个路由器,通过广域网连到了墙上。此外,Arduino 通过以太网屏蔽连接到路由器的一个以太网插头,我的笔记本电脑连接到另一个以太网插头。我正在尝试从网站检索数据,但我似乎无法加载它们。

Arduino 代码

#include <dht.h>
#include <SPI.h>
#include <Ethernet.h>

dht DHT1;
int temperatureSensorPin1 = 25;

byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
EthernetClient client;
EthernetServer server(80);

long previousMillis = 0;
unsigned long currentMillis = 0;
long interval = 250000;
String data;

long lastUpdate = 0;

void setup() {

  Serial.begin(9600);
  if(Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
  }

  data = "";

  pinMode(temperatureSensorPin1, INPUT);
}

void loop() {


int temp1 = DHT1.read11(temperatureSensorPin1);

switch (temp1)
  {
    case DHTLIB_OK:  
        Serial.print("OK,\t"); 
        break;
    case DHTLIB_ERROR_CHECKSUM: 
        Serial.print("Checksum error,\t"); 
        break;
    case DHTLIB_ERROR_TIMEOUT: 
        Serial.print("Time out error,\t"); 
        break;
    case DHTLIB_ERROR_CONNECT:
        Serial.print("Connect error,\t");
        break;
    case DHTLIB_ERROR_ACK_L:
        Serial.print("Ack Low error,\t");
        break;
    case DHTLIB_ERROR_ACK_H:
        Serial.print("Ack High error,\t");
        break;
    default: 
        Serial.print("Unknown error,\t"); 
        break;
  }

  currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;
  }
  String data="temp1="+String(DHT1.temperature, 0)+"&temp2="+String(DHT2.temperature, 0)+"&temp3="+String(DHT3.temperature, 0)+"&temp4="+String(DHT4.temperature, 0)+"&temp5="+String(DHT5.temperature, 0)
                  +"&hum1="+String(DHT1.humidity, 0)+"&hum2="+String(DHT2.humidity, 0)+"&hum3="+String(DHT3.humidity, 0)+"&hum4="+String(DHT4.humidity, 0)+"&hum5="+String(DHT5.humidity, 0)+"&gas="+gasValue;

  Serial.println(Ethernet.localIP());
  if(client.connect("192.168.0.1", 80)) {
    client.println("POST /home/visualisation.php HTTP/1.1");
    client.println("Host:  192.168.0.1");
    //client.println("User-Agent: Arduino/1.0");
    //client.println("Connection: close");
    client.println("Content-Type: application/x-www-form-urlencoded;");
    client.print("Content-Length: ");
    client.println(data.length());
    client.println();
    client.print(data);
    //Serial.println(data);
    Serial.println("We have connection");
  }

  if(client.connected()) {    
    Serial.println("We have abc");
    client.stop();
  }

  delay(4000);
}

PHP 代码

<?php
$temp1 = "";
if(isset($_POST['temp1'])) {
    $temp1 = $_POST['temp1'];
}
echo $temp1;
?>

Windows ip configuration

Router ip configuration

我建立的连接是否合适?我应该怎么做才能工作?

P.S.:我想澄清一下,我没有关于网络的扩展知识。

最佳答案

我让 Arduino 将数据发送到的 IP 是路由器的 IP,因此,我应该使用我的计算机的 192.168.0.100 IP。

我还需要将值保存到数据库以注意到更改,因为 echo $temp1; 似乎不起作用,也许我应该将它包含到 HTML 标签 标签。不管怎样,我只是将数据库中的值加载到一个 PHP 变量中,我就完成了任务。

关于php - 将数据从 Arduino 发布到网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39022624/

相关文章:

php - 将 Nav a 元素排列在彼此下方

php - 如何通过当前记录ID从连接表中读取数据?

php - 为什么此代码不适用于所有声音和所有播放列表?它仅适用于第一个声音和第一个播放列表

c - 将动态分配的二维数组分配给结构中的双指针时出现段错误

c++ - 使用 cstrings 时未处理的异常

http - JMeter 连接超时和重试

java - 如何在 Http POST 请求中发送图像文件? ( java )

php - WooCommerce 在变体标签后显示内容

c - 在分配的内存范围之外写入时没有错误

apache - mod_rewrite 不作为内部代理工作