我无法使用 AT 命令通过 Arduino 从 ESP8266 (ESP-01) 向网站发送数据
I am having trouble sending data to website from ESP8266 (ESP-01) via Arduino with AT commands
我正在通过 ESP8266 通过 Arduino AT 命令向我的网站发送 GET 请求。
我在 Google 上搜索了很多,但找不到好的解决方案。
对于第一个循环,代码工作正常,但对于下一个循环,代码出错。
不同类型
这是我的代码:
#include <SoftwareSerial.h>
SoftwareSerial esp(2, 3); // Arduino RX:2, TX:3
String WIFI_SSID = "wifi_ssid"; //your network SSID
String WIFI_PWD = "wifi_pass"; //your network password
String Domain = "www.example.com";
void setup() {
Serial.begin(9600);
Serial.println("Started....");
esp.begin(9600);
//esp.setTimeout(500);
espAT("AT\r\n", 1000);
espAT("AT+CWMODE=1\r\n", 1000);
espAT("AT+CWJAP=\"" + WIFI_SSID + "\",\"" + WIFI_PWD + "\"\r\n", 5000);
espAT("AT+CIPSTATUS\r\n", 1000);
espAT("AT+CIPSTART=\"TCP\",\"" + Domain + "\",80\r\n", 5000);
}
void loop() {
int val = rand() % 255;
String request = "GET /iot/ HTTP/1.1\r\nHost: " + Domain + "\r\n\r\n";
espAT("AT\r\n", 1000);
espAT("AT+CIPSEND=" + String(request.length()+2) + "\r\n", 500);
espAT(request, 200);
String response = "";
while (esp.available()) {
response = esp.readStringUntil('0');
}
Serial.println(response);
espAT("AT+CIPCLOSE\r\n", 0);
delay(5000);
}
void espAT(String command, int waitFor)
{
esp.print(command);
int timeMillis = millis() + waitFor;
while (timeMillis > millis()) {
if (esp.available()) {
Serial.write(esp.read());
}
}
}
使用 Arduino 社区固件的 ESP8266 与 Arduino 一样好。我建议使用 ESP8266,如果您需要 Arduino,请让它们使用串口进行通信。看起来更整洁了。
最好的,
奥德赛
这个教程中的这段代码here对我来说非常有效。
#include <SoftwareSerial.h>
String ssid ="yourSSID";
String password="yourPassword";
SoftwareSerial esp(6, 7);// RX, TX
String data;
String server = "yourServer"; // www.example.com
String uri = "yourURI";// our example is /esppost.php
int DHpin = 8;//sensor pin
byte dat [5];
String temp ,hum;
void setup() {
pinMode (DHpin, OUTPUT);
esp.begin(9600);
Serial.begin(9600);
reset();
connectWifi();
}
//reset the esp8266 module
void reset() {
esp.println("AT+RST");
delay(1000);
if(esp.find("OK") ) Serial.println("Module Reset");
}
//connect to your wifi network
void connectWifi() {
String cmd = "AT+CWJAP=\"" +ssid+"\",\"" + password + "\"";
esp.println(cmd);
delay(4000);
if(esp.find("OK")) {
Serial.println("Connected!");
}
else {
connectWifi();
Serial.println("Cannot connect to wifi"); }
}
byte read_data () {
byte data;
for (int i = 0; i < 8; i ++) {
if (digitalRead (DHpin) == LOW) {
while (digitalRead (DHpin) == LOW); // wait for 50us
delayMicroseconds (30); // determine the duration of the high level to determine the data is '0 'or '1'
if (digitalRead (DHpin) == HIGH)
data |= (1 << (7-i)); // high front and low in the post
while (digitalRead (DHpin) == HIGH);
// data '1 ', wait for the next one receiver
}
} return data; }
void start_test () {
digitalWrite (DHpin, LOW); // bus down, send start signal
delay (30); // delay greater than 18ms, so DHT11 start signal can be detected
digitalWrite (DHpin, HIGH);
delayMicroseconds (40); // Wait for DHT11 response
pinMode (DHpin, INPUT);
while (digitalRead (DHpin) == HIGH);
delayMicroseconds (80);
// DHT11 response, pulled the bus 80us
if (digitalRead (DHpin) == LOW);
delayMicroseconds (80);
// DHT11 80us after the bus pulled to start sending data
for (int i = 0; i < 4; i ++)
// receive temperature and humidity data, the parity bit is not considered
dat[i] = read_data ();
pinMode (DHpin, OUTPUT);
digitalWrite (DHpin, HIGH);
// send data once after releasing the bus, wait for the host to open the next Start signal
}
void loop () {
start_test ();
// convert the bit data to string form
hum = String(dat[0]);
temp= String(dat[2]);
data = "temperature=" + temp + "&humidity=" + hum;// data sent must be under this form //name1=value1&name2=value2.
httppost();
delay(1000);
}
void httppost () {
esp.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");//start a TCP connection.
if( esp.find("OK")) {
Serial.println("TCP connection ready");
} delay(1000);
String postRequest =
"POST " + uri + " HTTP/1.0\r\n" +
"Host: " + server + "\r\n" +
"Accept: *" + "/" + "*\r\n" +
"Content-Length: " + data.length() + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n" +
"\r\n" + data;
String sendCmd = "AT+CIPSEND=";//determine the number of caracters to be sent.
esp.print(sendCmd);
esp.println(postRequest.length() );
delay(500);
if(esp.find(">")) { Serial.println("Sending.."); esp.print(postRequest);
if( esp.find("SEND OK")) { Serial.println("Packet sent");
while (esp.available()) {
String tmpResp = esp.readString();
Serial.println(tmpResp);
}
// close the connection
esp.println("AT+CIPCLOSE");
}
}}
我正在通过 ESP8266 通过 Arduino AT 命令向我的网站发送 GET 请求。 我在 Google 上搜索了很多,但找不到好的解决方案。
对于第一个循环,代码工作正常,但对于下一个循环,代码出错。 不同类型 这是我的代码:
#include <SoftwareSerial.h>
SoftwareSerial esp(2, 3); // Arduino RX:2, TX:3
String WIFI_SSID = "wifi_ssid"; //your network SSID
String WIFI_PWD = "wifi_pass"; //your network password
String Domain = "www.example.com";
void setup() {
Serial.begin(9600);
Serial.println("Started....");
esp.begin(9600);
//esp.setTimeout(500);
espAT("AT\r\n", 1000);
espAT("AT+CWMODE=1\r\n", 1000);
espAT("AT+CWJAP=\"" + WIFI_SSID + "\",\"" + WIFI_PWD + "\"\r\n", 5000);
espAT("AT+CIPSTATUS\r\n", 1000);
espAT("AT+CIPSTART=\"TCP\",\"" + Domain + "\",80\r\n", 5000);
}
void loop() {
int val = rand() % 255;
String request = "GET /iot/ HTTP/1.1\r\nHost: " + Domain + "\r\n\r\n";
espAT("AT\r\n", 1000);
espAT("AT+CIPSEND=" + String(request.length()+2) + "\r\n", 500);
espAT(request, 200);
String response = "";
while (esp.available()) {
response = esp.readStringUntil('0');
}
Serial.println(response);
espAT("AT+CIPCLOSE\r\n", 0);
delay(5000);
}
void espAT(String command, int waitFor)
{
esp.print(command);
int timeMillis = millis() + waitFor;
while (timeMillis > millis()) {
if (esp.available()) {
Serial.write(esp.read());
}
}
}
使用 Arduino 社区固件的 ESP8266 与 Arduino 一样好。我建议使用 ESP8266,如果您需要 Arduino,请让它们使用串口进行通信。看起来更整洁了。
最好的, 奥德赛
这个教程中的这段代码here对我来说非常有效。
#include <SoftwareSerial.h>
String ssid ="yourSSID";
String password="yourPassword";
SoftwareSerial esp(6, 7);// RX, TX
String data;
String server = "yourServer"; // www.example.com
String uri = "yourURI";// our example is /esppost.php
int DHpin = 8;//sensor pin
byte dat [5];
String temp ,hum;
void setup() {
pinMode (DHpin, OUTPUT);
esp.begin(9600);
Serial.begin(9600);
reset();
connectWifi();
}
//reset the esp8266 module
void reset() {
esp.println("AT+RST");
delay(1000);
if(esp.find("OK") ) Serial.println("Module Reset");
}
//connect to your wifi network
void connectWifi() {
String cmd = "AT+CWJAP=\"" +ssid+"\",\"" + password + "\"";
esp.println(cmd);
delay(4000);
if(esp.find("OK")) {
Serial.println("Connected!");
}
else {
connectWifi();
Serial.println("Cannot connect to wifi"); }
}
byte read_data () {
byte data;
for (int i = 0; i < 8; i ++) {
if (digitalRead (DHpin) == LOW) {
while (digitalRead (DHpin) == LOW); // wait for 50us
delayMicroseconds (30); // determine the duration of the high level to determine the data is '0 'or '1'
if (digitalRead (DHpin) == HIGH)
data |= (1 << (7-i)); // high front and low in the post
while (digitalRead (DHpin) == HIGH);
// data '1 ', wait for the next one receiver
}
} return data; }
void start_test () {
digitalWrite (DHpin, LOW); // bus down, send start signal
delay (30); // delay greater than 18ms, so DHT11 start signal can be detected
digitalWrite (DHpin, HIGH);
delayMicroseconds (40); // Wait for DHT11 response
pinMode (DHpin, INPUT);
while (digitalRead (DHpin) == HIGH);
delayMicroseconds (80);
// DHT11 response, pulled the bus 80us
if (digitalRead (DHpin) == LOW);
delayMicroseconds (80);
// DHT11 80us after the bus pulled to start sending data
for (int i = 0; i < 4; i ++)
// receive temperature and humidity data, the parity bit is not considered
dat[i] = read_data ();
pinMode (DHpin, OUTPUT);
digitalWrite (DHpin, HIGH);
// send data once after releasing the bus, wait for the host to open the next Start signal
}
void loop () {
start_test ();
// convert the bit data to string form
hum = String(dat[0]);
temp= String(dat[2]);
data = "temperature=" + temp + "&humidity=" + hum;// data sent must be under this form //name1=value1&name2=value2.
httppost();
delay(1000);
}
void httppost () {
esp.println("AT+CIPSTART=\"TCP\",\"" + server + "\",80");//start a TCP connection.
if( esp.find("OK")) {
Serial.println("TCP connection ready");
} delay(1000);
String postRequest =
"POST " + uri + " HTTP/1.0\r\n" +
"Host: " + server + "\r\n" +
"Accept: *" + "/" + "*\r\n" +
"Content-Length: " + data.length() + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n" +
"\r\n" + data;
String sendCmd = "AT+CIPSEND=";//determine the number of caracters to be sent.
esp.print(sendCmd);
esp.println(postRequest.length() );
delay(500);
if(esp.find(">")) { Serial.println("Sending.."); esp.print(postRequest);
if( esp.find("SEND OK")) { Serial.println("Packet sent");
while (esp.available()) {
String tmpResp = esp.readString();
Serial.println(tmpResp);
}
// close the connection
esp.println("AT+CIPCLOSE");
}
}}