0.基本模組
ESP8266端
#include <ESP8266WiFi.h>
#define title1 "Arduino A0 : "
#define title2 "Arduino A1 : "
///////////////////////////////////////////////////
#define SSID "tomorrows"
#define PASSWORD "---"
///////////////////////////////////////////////////
WiFiServer server(80);
String response,read1,read2;
unsigned long t1,t2;
void data_to_html(String data1, String data2){
WiFiClient client = server.available();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
//client.println("Refresh: 5");
client.println();
client.println("<!DOCTYPE html>");
client.println("<head>\n<meta charset='UTF-8'>");
client.println("<title>ESP8266 Server</title>");
client.println("</head>\n<body>");
client.println("<H2>ESP8266 Server</H2>");
client.println("<H3>CSJH Maker</H3>");
client.println("<pre>");
client.print(title1);
client.println(data1);
client.print(title2);
client.println(data2);
client.println("</pre>");
client.print("</body>\n</html>");
}
void send_ip(){
Serial.print("A");
Serial.flush();
Serial.print(WiFi.localIP());
Serial.flush();
Serial.println("B");
Serial.flush();
}
void get_data(){
response = "";
read1 = "";
read2 = "";
int check_head, check_body , check_foot ;
while(Serial.available()){
char c = Serial.read();
response += c ;
delay(10);}
for(int i=0 ; i<response.length() ; i++){
if(response.charAt(i)=='$'){
check_head=i;}}
for(int i=0 ; i<response.length() ; i++){
if(response.charAt(i)==','){
check_body=i;}}
for(int i=0 ; i<response.length() ; i++){
if(response.charAt(i)=='#'){
check_foot=i;}}
for(int i=check_head+1 ; i<check_body ; i++){
read1+= response.charAt(i);}
for(int i=check_body+1 ; i<check_foot ; i++){
read2+= response.charAt(i);
}}
void setup() {
Serial.begin(9600);
delay(10);
// Connect to WiFi network
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) {delay(500);}
server.begin();
t1=millis();
}
void loop() {
t2=millis();
if(t2>t1+1000){
send_ip();
t1=t2;
}
if(Serial.available()){
get_data();
}
data_to_html(read1,read2);
}
Arduino端
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,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 response,read1,ip;
unsigned long t1,t2;
void lcd_disp0(String data1,String data2){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print(data1);
lcd.setCursor(8,0);
lcd.print(data2);
}
void lcd_disp1(String data3){
lcd.setCursor(0,1);
lcd.print(data3);
}
void send_data(String data1,String data2){
String message = "$";
message += data1;
message += ",";
message += data2;
message += "#";
esp8266.println(message);
}
void get_ip(){
ip = "";
while(esp8266.available()){
char c = esp8266.read();
ip += c ;
delay(10);
}
int check_head, check_foot ;
for(int i=0 ; i<ip.length() ; i++){
if(ip.charAt(i)=='A'){
check_head=i;}}
for(int i=0 ; i<ip.length() ; i++){
if(ip.charAt(i)=='B'){
check_foot=i;}}
read1="";
for(int i=check_head+1 ; i<check_foot ; i++){
read1+= ip.charAt(i);}
lcd_disp1(read1);
}
void setup() {
Serial.begin(9600);
esp8266.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
t1=millis();
}
void loop() {
String x="";
String y="";
x = String(analogRead(A0));
y = String(analogRead(A1));
t2=millis();
if(t2>t1+1000){
lcd_disp0(x,y);
send_data(x,y);
t1=t2;
}
if(esp8266.available()){
get_ip();
}
}
APC220 版
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); // 若LCD 無法啟用,請將0X3F 改為0X27
String response,read1,ip;
unsigned long t1,t2;
void lcd_disp0(String data1,String data2){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print(data1);
lcd.setCursor(8,0);
lcd.print(data2);
}
void lcd_disp1(String data3){
lcd.setCursor(0,1);
lcd.print(data3);
}
void send_data(String data1,String data2){
String message = "$";
message += data1;
message += ",";
message += data2;
message += "#";
Serial.println(message);
}
void get_ip(){
ip = "";
while(Serial.available()){
char c = Serial.read();
ip += c ;
delay(10);
}
int check_head, check_foot ;
for(int i=0 ; i<ip.length() ; i++){
if(ip.charAt(i)=='A'){
check_head=i;}}
for(int i=0 ; i<ip.length() ; i++){
if(ip.charAt(i)=='B'){
check_foot=i;}}
read1="";
for(int i=check_head+1 ; i<check_foot ; i++){
read1+= ip.charAt(i);}
lcd_disp1(read1);
}
void setup() {
Serial.begin(9600);
esp8266.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
t1=millis();
}
void loop() {
String x="";
String y="";
x = String(analogRead(A0));
y = String(analogRead(A1));
t2=millis();
if(t2>t1+1000){
lcd_disp0(x,y);
send_data(x,y);
t1=t2;
}
if(Serial.available()){
get_ip();
}
}