4.EXCEL輸入(一)
ESP8266端 (RX)
#include <ESP8266WiFi.h> // 提供Wi-Fi功能的程式庫
#include <ESP8266WebServer.h> // 提供網站伺服器功能的程式庫
///////////////////////////
#define SSID "tomorrows"
#define PASSWORD "----"
///////////////////////////
ESP8266WebServer server(80); // 宣告網站伺服器物件與埠號
unsigned long t1,t2;
// 定義處理首頁請求的自訂函式
void rootRouter() {
server.send(200, "text/html", "Hello from <b>ESP8266</b>!");
}
void send_ip(){
Serial.print("D");
Serial.print(WiFi.localIP());
Serial.print("E");
Serial.flush();
}
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {delay(500);}
server.on("/index.html", rootRouter); //處理首頁連結請求的事件
server.on("/", rootRouter);
server.on("/cmd", []() {
String cmd1=server.arg("A");
String cmd2=server.arg("B");
Serial.print("A");
Serial.print(cmd1);
Serial.print("B");
Serial.print(cmd2);
Serial.print("C");
Serial.flush();
server.send(200, "text/html", "A = <b>" + cmd1 + "</b><br>"+"B = <b>" + cmd2 + "</b><br>" );
});
server.onNotFound([](){ // 處理「找不到指定路徑」的事件
server.send(404, "text/plain", "File NOT found!");
});
server.begin();
send_ip();
t1=millis();
}
void loop() {
server.handleClient(); // 處理用戶連線
t2=millis();
if(t2>t1+30000){
send_ip();
t1=t2;
}}
ESP8266端 (TX)
#include <Arduino.h>
#include <ESP8266WiFi.h> // 提供Wi-Fi功能的程式庫
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFiMulti.h>
////////////////////////////
#define SSID "tomorrows"
#define PASSWORD "----"
////////////////////////////
ESP8266WiFiMulti WiFiMulti;
WiFiServer server(80); // 宣告網站伺服器物件與埠號
const int httpPort = 80;
unsigned long t1,t2;
String cmd, data_A,data_B,host;
int A=0 , B=0 , C=0 , D=0 , E=0;
void data_to_RX(String data3, String data4){
String url = "http://";
url+=host;
url+="/cmd?A=";
url+=data3;
url+="&B=";
url+=data4;
// This will send the request to the server
if((WiFiMulti.run() == WL_CONNECTED)) {
HTTPClient http;
http.begin(url);
int httpCode = http.GET();
if(httpCode > 0) {
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString(); }
} else {}
http.end(); }}
void rec_cmd(){
cmd="" ;
while(Serial.available()){
char c = Serial.read();
cmd+= c;
delay(10);}
if(cmd.charAt(0)=='A'){
data_A="" , data_B="";
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='A'){A=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='B'){B=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='C'){C=i;}}
for(int i=A+1 ; i<B ; i++){data_A +=cmd.charAt(i);}
for(int i=B+1 ; i<C ; i++){data_B +=cmd.charAt(i);}
data_to_RX(data_A , data_B);
}
if(cmd.charAt(0)=='D'){
host="";
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='D'){D=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='E'){E=i;}}
for(int i=D+1 ; i<E ; i++){host +=cmd.charAt(i);}
}
Serial.print("OK");}
void setup() {
Serial.begin(9600);
WiFiMulti.addAP(SSID, PASSWORD);
}
void loop(){
if(Serial.available()){
rec_cmd();
}}
ESP8266端 (TX)
另一個程式碼(可以線上改host,不需要刷韌體)
#include <ESP8266WiFi.h> // 提供Wi-Fi功能的程式庫
#include <ESP8266WebServer.h> // 提供網站伺服器功能的程式庫
////////////////////////////////////
#define SSID "tomorrows"
#define PASSWORD "----"
const char* host = "192.168.1.254";
////////////////////////////////////
ESP8266WebServer server(80);
const int httpPort = 80;
unsigned long t1,t2;
String cmd, data_A,data_B,host1;
int A=0 , B=0 , C=0 , D=0 , E=0;
void rootRouter() {
server.send(200, "text/html", "past behind TX_IP <B>/host?h=</b>");
}
void send_ip(){
Serial.print("F");
Serial.print(WiFi.localIP());
Serial.print("G");
Serial.flush();
}
void data_to_RX(String data3, String data4){
WiFiClient client;
if (!client.connect(host, httpPort)) {
return;
}
String url = "/cmd?A=";
url+=data3;
url+="&B=";
url+=data4;
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
}
void rec_cmd(){
cmd="" ;
while(Serial.available()){
char c = Serial.read();
cmd+= c;
delay(10);}
if(cmd.charAt(0)=='A'){
data_A="" , data_B="";
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='A'){A=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='B'){B=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='C'){C=i;}}
for(int i=A+1 ; i<B ; i++){data_A +=cmd.charAt(i);}
for(int i=B+1 ; i<C ; i++){data_B +=cmd.charAt(i);}
data_to_RX(data_A , data_B);
}
if(cmd.charAt(0)=='D'){
host = "";
host1="";
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='D'){D=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='E'){E=i;}}
for(int i=D+1 ; i<E ; i++){host1 +=cmd.charAt(i);}
host = host1.c_str();
Serial.print("OK");
}
}
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {delay(500);}
server.on("/index.html", rootRouter); // 處理首頁連結請求的事件
server.on("/", rootRouter);
server.on("/host", []() {
host = "";
host1 = server.arg("h");
host = host1.c_str();
server.send(200, "text/html", "New Host = <b>" + host1 + "</b>");
});
server.onNotFound([](){ // 處理「找不到指定路徑」的事件
server.send(404, "text/plain", "File NOT found!");
});
server.begin();
send_ip();
}
void loop(){
server.handleClient();
if(Serial.available()){
rec_cmd();
send_ip();
}}
Arduino端(RX)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // 若LCD 無法啟用,請將0X3F 改為0X27
#include <SoftwareSerial.h>
#define RX 3 //ESP8266 的 TX接3
#define TX 2 //ESP8266 RX接2
SoftwareSerial esp8266(RX,TX);
String cmd,ip,data_A,data_B;
int A=0 , B=0 , C=0 , D=0 , E=0;
void lcd_disp(String data1,String data2){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("A=");
lcd.print(data1);
lcd.print(" B=");
lcd.print(data2);
}
void lcd_ip(String data3){
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(data3);
}
void rec_cmd(){
cmd="" , ip="" , data_A="" , data_B="";
while(esp8266.available()){
char c = esp8266.read();
cmd+= c;
delay(10);}
if(cmd.charAt(0)=='A'){
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='A'){A=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='B'){B=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='C'){C=i;}}
for(int i=A+1 ; i<B ; i++){data_A +=cmd.charAt(i);}
for(int i=B+1 ; i<C ; i++){data_B +=cmd.charAt(i);}
lcd_disp(data_A,data_B);
Serial.print(data_A);
Serial.print(",");
Serial.println(data_B);
}
if(cmd.charAt(0)=='D'){
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='D'){D=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='E'){E=i;}}
for(int i=D+1 ; i<E ; i++){ip +=cmd.charAt(i);}
lcd_ip(ip);
}}
void setup() {
Serial.begin(9600);
esp8266.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop() {
if(esp8266.available()){
rec_cmd();
}}
Arduino端(TX)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
/////////////////////////////////////////////////////
#define host "192.168.1.254"
//#define host "10.233.95.178"
#define timing 1000 //建議1000毫秒一組數據
/////////////////////////////////////////////////////
unsigned long t1,t2;
int i=0;
String A,B ;
void lcd_disp(String data1,String data2){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("A=");
lcd.print(data1);
lcd.print(" B=");
lcd.print(data2);
}
void send_host(){
Serial.print("D");
Serial.print(host);
Serial.print("E");
Serial.flush();
}
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
do{
send_host();
delay(200);
lcd.setCursor(0,1);
lcd.print("waiting...");
}while(!Serial.find("OK"));
lcd.setCursor(0,1);
lcd.print("host ok!");
t1=millis();
}
void loop() {
t2=millis();
if(t2>t1+timing){
A="";
B="";
i++;
A=String(i);
B=String(analogRead(A0));
Serial.print("A");
Serial.print(A);
Serial.print("B");
Serial.print(B);
Serial.print("C");
Serial.flush();
lcd_disp(A,B);
lcd.setCursor(0,1);
lcd.print("Sending Data...");
t1=t2;
}
}
Arduino端(TX)
另一個程式碼(可以線上改host,不需要刷韌體)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
/////////////////////////////////////////////////////
#define host "192.168.1.254"
//#define host "10.233.95.178"
#define timing 1000 //建議1000毫秒一組數據
/////////////////////////////////////////////////////
unsigned long t1,t2;
int i=0;
String A,B,ip,cmd ;
int F=0 , G=0;
void lcd_disp(String data1,String data2){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("A=");
lcd.print(data1);
lcd.print(" B=");
lcd.print(data2);
lcd.setCursor(14,0);
lcd.print("TX");
}
void send_host(){
Serial.print("D");
Serial.print(host);
Serial.print("E");
Serial.flush();
}
void rec_ip(){
cmd="" , ip="";
while(Serial.available()){
char c = Serial.read();
cmd+= c;
delay(10);}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='F'){F=i;}}
for(int i=0 ; i<cmd.length() ;i++){if(cmd.charAt(i)=='G'){G=i;}}
for(int i=F+1 ; i<G ; i++){ip +=cmd.charAt(i);}
lcd.setCursor(0,1);
lcd.print(ip);
}
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
do{
send_host();
delay(200);
lcd.setCursor(0,1);
lcd.print("waiting...");
}while(!Serial.find("OK"));
lcd.clear();
lcd.setCursor(0,1);
lcd.print("host ok!");
t1=millis();
}
void loop() {
if(Serial.available()){
rec_ip();
}
t2=millis();
if(t2>t1+timing){
A="";
B="";
i++;
A=String(i);
B=String(analogRead(A0));
Serial.print("A");
Serial.print(A);
Serial.print("B");
Serial.print(B);
Serial.print("C");
Serial.flush();
lcd_disp(A,B);
lcd.setCursor(14,1);
lcd.print("ok");
t1=t2;
}}