#include <ESP8266WiFi.h>
2024年1月13日 星期六
Arduino 網頁控制紅外線發射 增加網頁按鈕
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
const uint16_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2).
IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message.
#ifndef STASSID
#define STASSID "POCO X3 Pro"
#define STAPSK "66666666"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(115200);
irsend.begin();
// prepare LED
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, 0);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print(F("Connecting to "));
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(F("."));
}
Serial.println();
Serial.println(F("WiFi connected"));
// Start the server
server.begin();
Serial.println(F("Server started"));
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.accept();
if (!client) { return; }
Serial.println(F("new client"));
client.setTimeout(5000); // default is 1000
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(F("request: "));
Serial.println(req);
// Match the request
int val,IR;
if (req.indexOf(F("/gpio/0")) != -1) {
val = 0;
} else if (req.indexOf(F("/gpio/1")) != -1) {
val = 1;}
else if (req.indexOf(F("/IRon")) != -1)
{IR = 0;
Serial.println("NEC");
irsend.sendNEC(0xCF20D);
}
else if (req.indexOf(F("/IRoff")) != -1)
{IR = 1;
}
else {
Serial.println(F("invalid request"));
val = digitalRead(LED_BUILTIN);
}
// Set LED according to the request
digitalWrite(LED_BUILTIN, val);
// read/ignore the rest of the request
// do not client.flush(): it is for output only, see below
while (client.available()) {
// byte by byte is not very efficient
client.read();
}
// Send the response to the client
// it is OK for multiple small client.print/write,
// because nagle algorithm will group them into one single packet
client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n"));
client.print(WiFi.localIP());
client.print(F("This hostname:\n"));//读取当前的hostname并输出
client.print(WiFi.hostname());
client.print(F(" "));
client.print(F("GPIO is now "));
client.print((val) ? F("high") : F("low"));
client.print(F(" "));
client.print(F("Click <a href='http://"));
client.print(WiFi.localIP());
client.print(F("/gpio/0'>here</a> to switch LED GPIO on, or <a href='http://"));
client.print(WiFi.localIP());
client.print(F("/gpio/1'>here</a> to switch LED GPIO off. Or <a href='http://"));
client.print(WiFi.localIP());
client.print(F("/IRon'>here</a> to send IR on."));
client.print(F("<br><br>"));
client.print(F("192.168.179.146"));
client.print(F(" "));
client.print(F("Click <a href='http://"));
client.print(F("192.168.179.146"));
client.print(F("/gpio/0'>here</a> to switch LED GPIO on, or <a href='http://"));
client.print(F("192.168.179.146"));
client.print(F("/gpio/1'>here</a> to switch LED GPIO off. Or <a href='http://"));
client.print(F("192.168.179.146"));
client.print(F("/IRon'>here</a> to send IR on."));
client.print(F(" "));
client.print(F(" <p><a href=\"/192.168.179.146/IRon\">"));
client.print(F(" <button class=\"button\" style=\"width:360px;height:120px;font-size:40px;background-color:green;\" >ON</button></a> "));
client.print(F(" <a href=\"/192.168.179.146/IRoff\">"));
client.print(F(" <button class=\"button\" style=\"width:360px;height:120px;font-size:40px;background-color:red;\" >OFF</button></a></p> "));
client.print(F("<br><br>"));
client.print(F("192.168.179.246"));
client.print(F(" "));
client.print(F("Click <a href='http://"));
client.print(F("192.168.179.246"));
client.print(F("/gpio/0'>here</a> to switch LED GPIO on, or <a href='http://"));
client.print(F("192.168.179.246"));
client.print(F("/gpio/1'>here</a> to switch LED GPIO off. Or <a href='http://"));
client.print(F("192.168.179.246"));
client.print(F("/IRon'>here</a> to send IR on."));
client.print(F(" "));
client.print(F(" <p><a href=\"/192.168.179.146/IRon\">"));
client.print(F(" <button class=\"button\" style=\"width:360px;height:120px;font-size:40px;background-color:green;\" >ON</button></a> "));
client.print(F(" <a href=\"/192.168.179.146/IRoff\">"));
client.print(F(" <button class=\"button\" style=\"width:360px;height:120px;font-size:40px;background-color:red;\" >OFF</button></a></p> "));
client.print(F("</html>"));
// The client will actually be *flushed* then disconnected
// when the function returns and 'client' object is destroyed (out-of-scope)
// flush = ensure written data are received by the other side
Serial.println(F("Disconnecting from client"));
}
2024年1月10日 星期三
Arduino 多台網頁互控發射紅外線 [架構說明]
固定IP 多個webserver
每個Arduino都開啟一個webServer
每個webServer都能夠接收超連結網址
所以無論是開關都是輸入網址
也就是沒有網頁其實也能藉由背好的網址控制。
但是這些Arduino必須在同一個WiFi下,
也就是同個區網內,
才能彼此互相靠網址溝通。
所以client只要是能連上那個WiFi,再有瀏覽器就能操控所有Arduino
Arduino HTML 按鈕超連結
參考
https://sites.google.com/view/rayarduino/esp32-web-server_two_leds
<HTML>
<HEAD>
<TITLE>語法練習版</TITLE>
</HEAD>
<BODY>
<input type="button" value="ON" style="width:120px;height:40px;font-size:20px;background-color:green;" onclick="location.href='你要前往的網址'">
<input type="button" value="OFF" style="width:120px;height:40px;font-size:20px;background-color:red;" onclick="location.href='你要前往的網址'">
</BODY>
</HTML>
這段不知怎融合Arduino
------------------------------------------------------------------------------------------------------------
Arduino可用 參考連結融合
client.print(F(" "));
client.print(F(" <p><a href=\"/192.168.179.146/IRon\">"));
client.print(F(" <button class=\"button\" style=\"width:360px;height:120px;font-size:40px;background-color:green;\" >ON</button></a> "));
client.print(F(" <a href=\"/192.168.179.146/IRoff\">"));
client.print(F(" <button class=\"button\" style=\"width:360px;height:120px;font-size:40px;background-color:red;\" >OFF</button></a></p> "));
訂閱:
意見 (Atom)
-
選板子 選板子前要先安裝ESP8266 打開 Arduino IDE,菜單 / 偏好設定,額外的開發板管理員網址打上: https://arduino.esp8266.com/stable/package_esp8266com_index.json 安裝ESP8266的方法 vo...
-
目前功能, 連上WiFi後,用網頁控制Arduino發射紅外線, WiFi無線控制有紅外線接收器的設備。 無線功能由WiFi傳輸, 所以需要一個WiFi基地台, 試驗時可用手機分享基地台熱點當作WiFi主機(基地台)。 Arduino連上WiFi後, 創建一個WiFiWebSer...