3.Arduino UNO控制
index.h 檔
const char PAGE_INDEX[] PROGMEM = R"=====(
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Arduino UNO 腳位控制</title>
<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css">
<style type="text/css">
body {
font-family: "微軟正黑體", "黑體-繁", sans-serif;
}
</style>
</head>
<body>
<h1>Arduino數位輸出</h1>----------------------<br>
D2:
<div id="D2">
<input type="radio" id="D2_ON" class="D2" value="ON" name="D2"><label for="D2_ON"> 開 </label>
<input type="radio" id="D2_OFF" class="D2" checked="checked" value="OFF" name="D2"><label for="D2_OFF"> 關 </label>
</div>----------------------<br>
D4:
<div id="D4">
<input type="radio" id="D4_ON" class="D4" value="ON" name="D4"><label for="D4_ON"> 開 </label>
<input type="radio" id="D4_OFF" class="D4" checked="checked" value="OFF" name="D4"><label for="D4_OFF"> 關 </label>
</div>----------------------<br>
D7:
<div id="D7">
<input type="radio" id="D7_ON" class="D7" value="ON" name="D7"><label for="D7_ON"> 開 </label>
<input type="radio" id="D7_OFF" class="D7" checked="checked" value="OFF" name="D7"><label for="D7_OFF"> 關 </label>
</div>----------------------<br>
D8:
<div id="D8">
<input type="radio" id="D8_ON" class="D8" value="ON" name="D8"><label for="D8_ON"> 開 </label>
<input type="radio" id="D8_OFF" class="D8" checked="checked" value="OFF" name="D8"><label for="D8_OFF"> 關 </label>
</div>----------------------<br>
D12:
<div id="D12">
<input type="radio" id="D12_ON" class="D12" value="ON" name="D12"><label for="D12_ON"> 開 </label>
<input type="radio" id="D12_OFF" class="D12" checked="checked" value="OFF" name="D12"><label for="D12_OFF"> 關 </label>
</div>----------------------<br>
D13:
<div id="D13">
<input type="radio" id="D13_ON" class="D13" value="ON" name="D13"><label for="D13_ON"> 開 </label>
<input type="radio" id="D13_OFF" class="D13" checked="checked" value="OFF" name="D13"><label for="D13_OFF"> 關 </label>
</div>----------------------<br>
<h1>Arduino PWM輸出</h1>----------------------<br>
D3 PWM:
<div id="D3"></div>
D5 PWM:
<div id="D5"></div>
D6 PWM:
<div id="D6"></div>
D9 PWM:
<div id="D9"></div>
D10 PWM:
<div id="D10"></div>
D11 PWM:
<div id="D11"></div>
<script src="https://code.jquery.com/jquery-1.12.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<script>
$(function() {
$( "#D2" ).buttonset();
$(".D2").change(function(evt) {
var state = $(this).val();
$.post("/D2", {D2:state});
});
$( "#D4" ).buttonset();
$(".D4").change(function(evt) {
var state = $(this).val();
$.post("/D4", {D4:state});
});
$( "#D7" ).buttonset();
$(".D7").change(function(evt) {
var state = $(this).val();
$.post("/D7", {D7:state});
});
$( "#D8" ).buttonset();
$(".D8").change(function(evt) {
var state = $(this).val();
$.post("/D8", {D8:state});
});
$( "#D12" ).buttonset();
$(".D12").change(function(evt) {
var state = $(this).val();
$.post("/D12", {D12:state});
});
$( "#D13" ).buttonset();
$(".D13").change(function(evt) {
var state = $(this).val();
$.post("/D13", {D13:state});
});
$( "#D3" ).slider({
orientation: "horizontal",
range: "min",
max: 255,
value: 127,
change: function(){
var val = $(this).slider("value");
$.post("/D3", {D3:val});
}
});
$( "#D5" ).slider({
orientation: "horizontal",
range: "min",
max: 255,
value: 127,
change: function(){
var val = $(this).slider("value");
$.post("/D5", {D5:val});
}
});
$( "#D6" ).slider({
orientation: "horizontal",
range: "min",
max: 255,
value: 127,
change: function(){
var val = $(this).slider("value");
$.post("/D6", {D6:val});
}
});
$( "#D9" ).slider({
orientation: "horizontal",
range: "min",
max: 255,
value: 127,
change: function(){
var val = $(this).slider("value");
$.post("/D9", {D9:val});
}
});
$( "#D10" ).slider({
orientation: "horizontal",
range: "min",
max: 255,
value: 127,
change: function(){
var val = $(this).slider("value");
$.post("/D10", {D10:val});
}
});
$( "#D11" ).slider({
orientation: "horizontal",
range: "min",
max: 255,
value: 127,
change: function(){
var val = $(this).slider("value");
$.post("/D11", {D11:val});
}
});
});
</script>
</body>
</html>
)=====";
ESP8266端
#include <ESP8266WiFi.h> // 提供Wi-Fi功能的程式庫
#include <ESP8266WebServer.h> // 提供網站伺服器功能的程式庫
#include <ESP8266mDNS.h>
#include "index.h"
///////////////////////////////////////////////////
#define SSID "tomorrows"
#define PASSWORD "----"
///////////////////////////////////////////////////
ESP8266WebServer server(80); // 宣告網站伺服器物件與埠號
unsigned long t1,t2;
// 定義處理首頁請求的自訂函式
void rootRouter() {
server.send (200, "text/html", PAGE_INDEX );
}
void data_to_arduino(int data1 , int data2){
Serial.print("A");
Serial.print(data1);
Serial.print("B");
Serial.print(data2);
Serial.print("C");
Serial.flush();
}
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); }
if (!MDNS.begin("CSJH")) {
while(1) { delay(1000); }}
server.on ( "/", rootRouter);
server.on ( "/index.html", rootRouter);
server.on ("/D2", []() {
String state = server.arg("D2");
if (state == "ON") {
data_to_arduino(2, 1);
} else if (state == "OFF") {
data_to_arduino(2, 0);
}
});
server.on ("/D4", []() {
String state = server.arg("D4");
if (state == "ON") {
data_to_arduino(4, 1);
} else if (state == "OFF") {
data_to_arduino(4, 0);
}
});
server.on ("/D7", []() {
String state = server.arg("D7");
if (state == "ON") {
data_to_arduino(7, 1);
} else if (state == "OFF") {
data_to_arduino(7, 0);
}
});
server.on ("/D8", []() {
String state = server.arg("D8");
if (state == "ON") {
data_to_arduino(8, 1);
} else if (state == "OFF") {
data_to_arduino(8, 0);
}
});
server.on ("/D12", []() {
String state = server.arg("D12");
if (state == "ON") {
data_to_arduino(12, 1);
} else if (state == "OFF") {
data_to_arduino(12, 0);
}
});
server.on ("/D13", []() {
String state = server.arg("D13");
if (state == "ON") {
data_to_arduino(13, 1);
} else if (state == "OFF") {
data_to_arduino(13, 0);
}
});
server.on ("/D3", []() {
String D3 = server.arg("D3");
data_to_arduino(3, D3.toInt());
});
server.on ("/D5", []() {
String D5 = server.arg("D5");
data_to_arduino(5, D5.toInt());
});
server.on ("/D6", []() {
String D6 = server.arg("D6");
data_to_arduino(6, D6.toInt());
});
server.on ("/D9", []() {
String D9 = server.arg("D9");
data_to_arduino(10, D9.toInt());
});
server.on ("/D10", []() {
String D10 = server.arg("D10");
data_to_arduino(10,D10.toInt());
});
server.on ("/D11", []() {
String D11 = server.arg("D11");
data_to_arduino(11,D11.toInt());
});
server.onNotFound([](){ // 處理「找不到指定路徑」的事件
server.send(404, "text/plain", "File NOT found!");
});
server.begin();
MDNS.setInstanceName("CSJH_Maker");
MDNS.addService("http", "tcp", 80);
t1=millis();
send_ip();
}
void loop() {
server.handleClient(); // 處理用戶連線
t2=millis();
if(t2>t1+60000){
send_ip();
t1=t2;
}
}
Arduino端
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); // 若LCD 無法啟用,請將0X3F 改為0X27
String cmd, pin , sw ,ip;
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("pin=D");
lcd.print(data1);
lcd.print(" set=");
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="" , pin="" , sw="" , ip="";
while(Serial.available()){
char c = Serial.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++){pin +=cmd.charAt(i);}
for(int i=B+1 ; i<C ; i++){sw +=cmd.charAt(i);}
lcd_disp(pin,sw);
int pin_s = pin.toInt();
int sw_s = sw.toInt();
if(pin_s==2||pin_s==4||pin_s==7||pin_s==8||pin_s==12||pin_s==13){
digitalWrite(pin_s,sw_s);
}
if(pin_s==3||pin_s==5||pin_s==6||pin_s==9||pin_s==10||pin_s==11){
analogWrite(pin_s,sw_s);
}
}
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);
lcd.init();
lcd.backlight();
lcd.clear();
pinMode(2,OUTPUT);
pinMode(4,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
}
void loop() {
if(Serial.available()){
rec_cmd();
}
}