Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ENC28J60将数据从Ardunio Nano发送到PHP_Php_Arduino_Httpclient - Fatal编程技术网

如何使用ENC28J60将数据从Ardunio Nano发送到PHP

如何使用ENC28J60将数据从Ardunio Nano发送到PHP,php,arduino,httpclient,Php,Arduino,Httpclient,我试图从Arduino Nano发送传感器数据,该传感器与ENC28J60模块连接,用于以太网连接,Nano从我的路由器获得IP地址,没有任何问题,但当我想将数据发送到我的php页面时,它无法工作 我在《邮递员与工作》中尝试了链接,但在《Arduino Nano》中没有: 我的代码: #include <UIPEthernet.h> #include <ArduinoHttpClient.h> #include "utility/logging.h"

我试图从Arduino Nano发送传感器数据,该传感器与ENC28J60模块连接,用于以太网连接,Nano从我的路由器获得IP地址,没有任何问题,但当我想将数据发送到我的php页面时,它无法工作

我在《邮递员与工作》中尝试了链接,但在《Arduino Nano》中没有:

我的代码:

#include <UIPEthernet.h>
#include <ArduinoHttpClient.h>
#include "utility/logging.h"
EthernetClient client;
unsigned long next;
char serverAddress[] = "test.tech";  // server address
int port = 8080;

void setup() {
  Serial.begin(115200);
  uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
//  Ethernet.init(3); Serial.println("cs pin");
 Ethernet.begin(mac);

  Serial.println("Initiliazed");
  Serial.print(("localIP: "));
  Serial.println(Ethernet.localIP());
  Serial.print(("subnetMask: "));
  Serial.println(Ethernet.subnetMask());
  Serial.print(("gatewayIP: "));
  Serial.println(Ethernet.gatewayIP());
  Serial.print(("dnsServerIP: "));
  Serial.println(Ethernet.dnsServerIP());
  next = 0;
 

}
HttpClient client1 = HttpClient(client, serverAddress, port);
void loop()
{
  Serial.println("making GET request");
  client1.get("/Sensor/insert.php?temp=20&time=2020-08-10 19:58:46&Date=2020-08-10&Clock=19:58:46");
  int statusCode = client1.responseStatusCode();
  String response = client1.responseBody();
  Serial.print("Status code: ");
  Serial.println(statusCode);
  Serial.print("Response: ");
  Serial.println(response);
  Serial.println("Wait five seconds");
  delay(5000);
}
#包括
#包括
#包括“utility/logging.h”
以太网络客户端;
未签名的长下一个;
char serverAddress[]=“test.tech”;//服务器地址
int端口=8080;
无效设置(){
序列号开始(115200);
uint8_t mac[6]={0x00,0x01,0x02,0x03,0x04,0x05};
//Ethernet.init(3);Serial.println(“cs-pin”);
以太网开始(mac);
Serial.println(“初始化”);
连续打印((“localIP:”);
Serial.println(Ethernet.localIP());
串行.打印((“子网掩码:”);
Serial.println(Ethernet.subnetMask());
串行打印((“网关IP:”);
Serial.println(Ethernet.gatewayIP());
Serial.print((“dnsServerIP:”);
Serial.println(Ethernet.dnsServerIP());
next=0;
}
HttpClient client1=HttpClient(客户端、服务器地址、端口);
void循环()
{
Serial.println(“生成获取请求”);
client1.get(“/Sensor/insert.php?temp=20&time=2020-08-1019:58:46&Date=2020-08-10&Clock=19:58:46”);
int statusCode=client1.responseStatusCode();
字符串response=client1.responseBody();
串行打印(“状态代码:”);
Serial.println(状态码);
连续打印(“回复:”);
序列号println(应答);
Serial.println(“等待五秒钟”);
延迟(5000);
}
谢谢大家:

这段代码使用ENC28J60与我一起工作,aI可以将数据发送到PHP服务器,我希望有人会发现它有用:


#include <Time.h>               //http://www.pjrc.com/teensy/td_libs_Time.html
#include <TimeLib.h> //TimeLib library is needed https://github.com/PaulStoffregen/Time

#include <UIPEthernet.h> //UIPE ETHERNT LIBRARY FOR THE ETHERNET MODULE ENC28J60
#define DHTPIN 2
#define DHTTYPE DHT11   // DHT 22  (AM2302), AM2321

#define DEBUG // TURN DEBUGGING ON OR OFF, TO TURN IT OFF JUST COMMENT THIS LINE
DHT dht(DHTPIN, DHTTYPE);
/* ETHERNET SETTINGS
ARDUINO UNO PINS USED FOR THE ENC28J60 MODULE: 10=CS, 11=MOSI, 12=MISO, 13=SCK
THE ETHERNET MAC ADDRESS MUST BE UNIQUE IN THE PRIVATE LOCAL NETWORK
REMEMBER THAT THE MAC ADDRESS IS IN HEXADECIMAL FORMAT
IN THIS EXAMPLE WE USE THE FOLLOWING MAC ADDRESS : OE:96:03:38:94:92 */
byte mac[] = { 0x0E, 0x96, 0x03, 0x38, 0x94, 0x92 };
EthernetClient client; // CREATES A CLIENT WHICH CAN CONNECT TO A SPECIFIED INTERNET IP ADDRESS AND PORT
char server[] = "www.mydomain.tech"; /// IP ADDRESS OF THE LOCAL SERVER WE CONNECT AND SEND DATA TO
int  interval = 18000; // DELAY INTERVAL TO SAVE THE DATA IN THE DATABSE
long myinterval = 18000; //3 Minutes-> 180000ms INTERVAL BETWEEN DATA READINGS, I SET IT IN 6 SECONDS FOR TESTING PURPOSES
long previousMillis = 0;
int status = -2; // INITIALIZE THE CONNECTION STATUS VARIABLE
void setup() {
  Serial.begin(115200); // OPEN SERIAL COMMUNICATIONS AND WAIT FOR A PORT TO OPEN
  Ethernet.begin(mac); // INITIALIZES THE ETHERNET LIBRARY AND NETWORK SETTINGS
  /* ETHERNET SERIAL PRINTS
  INFORMATION ABOUT CLIENTS IP ADDRESS, THE SUBNET MASK OF THE NETWORK, THE GATEWAYS
  IP ADDRESS AND FINALLY THE DNS SERVER IP ADDRESS WHICH IS THE SAME AS THE GATEWAYS IP
  THESE INFORMATION WILL ONLY BE VISIBLE WHEN DEBUGGING IS ON */
  dht.begin();

#ifdef DEBUG
  Serial.println("Temperature Logger");
  Serial.println("*********************");
  Serial.print("IP Address   : ");
  Serial.println(Ethernet.localIP());
  Serial.print("Subnet Mask  : ");
  Serial.println(Ethernet.subnetMask());
  Serial.print("Default Gateway IP: ");
  Serial.println(Ethernet.gatewayIP());
  Serial.print("DNS Server IP     : ");
  Serial.println(Ethernet.dnsServerIP());
#endif
}

void loop() {
  unsigned long currentMillis = millis();
  // RESET ENC28J60 IN CASE OF FAILURE TO CONNECT WITH THE LOCAL SERVER
  if (!client.connect(server, 80)) {
#ifdef DEBUG
    Serial.println("Connection Failure: Resetting ENC28j60!");
#endif
    Enc28J60.init(mac); //RESET AND INITIALIZE THE ENC28J60 AND STARTS PACKET TRANSMISSION-RECEPTION
  } else {
    client.stop();
  }
  /* CONNECT TO THE SPECIFIED IP ADDRESS AND PORT
   IF A CONNECTION IS ESTABLISHED START SENDING DATA EVERY 3 MINUTES
   DATA WILL BE SENT AFTER THE FIRST 3 MINUTES
   ALSO WE CHECK THE STATUS OF THE SERVER
   THE FUNCTION CONNECT() RETURNS AN INT INDICATING CONNECTION STATUTS:
   SUCCESS (1)
   TIMED_OUT (-1)
   INVALID SERVER (-2)
   TRUNCATED (-3)
   INVALID RESPONSE (-4)*/
  status = client.connect(server, 80);
  if (status == 1) {
#ifdef DEBUG
    Serial.println("\nConnection Success");
#endif
    if (currentMillis - previousMillis > myinterval) {
      previousMillis = currentMillis;
      //READ DATA FROM THE DHT11 SENSOR
      /* THE READ11() FUNCTION RETURNS:
      DHTLIB_OK (0): THE SENSOR SAMPLE AND ITS CHECKSUM ARE OK
      DHTLIB_ERROR_CHECKSUM (-1): THE CHECKSUM TEST FAILED. THIS MEANS THE DATA WAS RECEIVED BUT MAY NOT BE CORRECT
      DHTLIB_ERROR_TIMEOUT (-2): A TIME OUT OCCURRED AND COMMUNICATION HAS FAILED
      BELOW WE CHECK THE STATUS OF THE SENSOR */
#ifdef DEBUG
      
#endif
      // PRINT THE HUMIDITY AND TEMPERATURE VALUES IN THE SERIAL MONITOR
#ifdef DEBUG
      Serial.print("\nValues: ");
      Serial.print(dht.readHumidity(), 1);
      Serial.print(",\t");
      Serial.println(dht.readTemperature(), 1);
      Serial.println("Connected...sendingData");
#endif
      // MAKE A HTTP REQUEST
      // SPECIFY THE PHP FILE LOCATION IN THE SERVER
      //PRINT DATA TO THE SERVER THE CLIENT IS CONNECTED TO
      //STRUCTURE: "GET /filepath/yourfile.php?"
      client.print( "GET /temptest/write_data.php?");
       client.print("temp=");
      client.print(dht.readTemperature(), 1); //THE VALUE TO WRITE IN THE DATABSE FOR TEMPERATURE
                 client.print("&&");
      client.print("hum="); //DATABASE VARIABLE IS USED
      client.print(dht.readHumidity(), 1); //THE VALUE TO WRITE IN THE DATABSE FOR HUMIDITY

      client.println( " HTTP/1.1");
      client.print( "Host: " );
      client.println(server);
      client.println( "Connection: close" );
      client.println();
      client.println();
      client.stop(); // DISCONNECT FROM THE SERVER
      delay(interval); //SOME INTERVAL FOR THE DATA TO BE WRITTEN IN THE DATABASE
    }
  }
  // IN CASE OF A TIME_OUT
  else if (status == -1) {
#ifdef DEBUG
    Serial.println("Connection Timed Out !");
#endif
  }
  // IN CASE OF AN INVALID SERVER
  else if (status == -2) {
#ifdef DEBUG
    Serial.println("Invalid Server !");
#endif
  }
  // IN CASE OF TRUNCATION
  else if (status == -3) {
#ifdef DEBUG
    Serial.println("Truncated !");
#endif
  }
  // IN CASE OF AN INVALID RESPONSE
  else if (status == -4) {
#ifdef DEBUG
    Serial.println("Invalid Response !");
#endif
  }
  // IN CASE OF AN UNKNOWN ERROR
  else {
#ifdef DEBUG
    Serial.println("Unknown Error !");
#endif
  }
}

#包括//http://www.pjrc.com/teensy/td_libs_Time.html
#include//TimeLib库是必需的https://github.com/PaulStoffregen/Time
#包括//以太网模块ENC28J60的UIPE ETHERNET库
#定义DHTPIN 2
#定义DHT类型DHT11//DHT 22(AM2302)、AM2321
#定义调试//打开或关闭调试,要关闭调试,只需注释此行即可
DHT-DHT(DHTPIN,DHTTYPE);
/*以太网设置
用于ENC28J60模块的ARDUINO UNO引脚:10=CS,11=MOSI,12=MISO,13=SCK
以太网MAC地址在专用本地网络中必须是唯一的
请记住,MAC地址是十六进制格式的
在本例中,我们使用以下MAC地址:OE:96:03:38:94:92*/
字节mac[]={0x0E,0x96,0x03,0x38,0x94,0x92};
EthernetClient客户端;//创建可以连接到指定INTERNET IP地址和端口的客户端
char服务器[]=“www.mydomain.tech”;///我们连接并向其发送数据的本地服务器的IP地址
整数间隔=18000;//在数据库中保存数据的延迟间隔
长myinterval=18000//数据读取间隔为3分钟->180000毫秒,我将其设置为6秒,用于测试
long-previousMillis=0;
int status=-2;//初始化连接状态变量
无效设置(){
Serial.begin(115200);//打开串行通信并等待端口打开
Ethernet.begin(mac);//初始化以太网库和网络设置
/*以太网串行打印
有关客户端IP地址、网络子网掩码和网关的信息
IP地址,最后是与网关IP相同的DNS服务器IP地址
这些信息只有在调试打开时才可见*/
dht.begin();
#ifdef调试
Serial.println(“温度记录器”);
Serial.println(“**********************”);
串行打印(“IP地址:”);
Serial.println(Ethernet.localIP());
串行打印(“子网掩码:”);
Serial.println(Ethernet.subnetMask());
串行打印(“默认网关IP:”);
Serial.println(Ethernet.gatewayIP());
串口打印(“DNS服务器IP:”);
Serial.println(Ethernet.dnsServerIP());
#恩迪夫
}
void循环(){
无符号长电流毫秒=毫秒();
//与本地服务器连接失败时重置ENC28J60
如果(!client.connect(服务器,80)){
#ifdef调试
Serial.println(“连接失败:重置ENC28j60!”);
#恩迪夫
init(mac);//重置并初始化Enc28J60并开始数据包传输-接收
}否则{
client.stop();
}
/*连接到指定的IP地址和端口
如果建立了连接,开始每3分钟发送一次数据
数据将在前3分钟后发送
我们还检查服务器的状态
函数CONNECT()返回一个INT,表示连接状态:
成功(1)
超时(-1)
无效服务器(-2)
截断(-3)
无效响应(-4)*/
状态=client.connect(服务器,80);
如果(状态==1){
#ifdef调试
Serial.println(“\n连接成功”);
#恩迪夫
如果(当前毫秒-以前的毫秒>我的间隔){
前一毫秒=当前毫秒;
//从DHT11传感器读取数据
/*函数的作用是:返回:
DHTLIB_OK(0):传感器样本及其校验和正常
DHTLIB_错误_校验和(-1):校验和测试失败。这意味着数据已收到,但可能不正确
DHTLIB_错误\u超时(-2):发生超时,通信失败
下面我们检查传感器的状态*/
#ifdef调试
#恩迪夫
//在串行监视器中打印湿度和温度值
#ifdef调试
Serial.print(“\n值:”);
Serial.print(dht.read湿度(),1);
串行打印(“,\t”);
Serial.println(dht.readTemperature(),1);
Serial.println(“已连接…发送数据”);
#恩迪夫
//发出HTTP请求
//指定服务器中的PHP文件位置
//将数据打印到客户端连接到的服务器
//结构:“GET/filepath/yourfile.php?”
print(“GET/tentest/write_data.php?”);
client.print(“temp=”);
client.print(dht.readTemperature(),1);//要写入数据库的温度值
客户。打印(&&);
client.print(“hum=”);//使用了数据库变量
客户