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;

}}