色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

網上找不到的源碼,ESP32 AP熱點 TCPsever 多線程控制開關

李智勇06 ? 來源:李智勇06 ? 作者:李智勇06 ? 2024-06-11 08:02 ? 次閱讀

#include //如果是ESP8266 用#include

#include "Ticker.h"

//李智勇編碼,采用AP方式做服務端,可以方便控制各種設備,網上此方面的代碼放出不多不完整,在此放出, 沒有采用網上流行的多個客戶端,那樣當新的客戶端不夠用時,處理邏輯太麻煩,一個客戶端發過來消息,服務端接收,發送確認消息,等控制指令結束發送斷開指令給客戶端,當服務端接到新的連接,主動斷開上個連接,這樣就不會阻塞網絡連接。

Ticker ticker_1; //控制一號繼電器,用計時器模擬多線程

Ticker ticker_2; //控制二號繼電器

#define PIN_R1 23 //輸出控制,

#define PIN_R2 22 //輸出控制,

// 初始化一個WiFi服務器,端口為****

#define SERVER_PORT ****

#define CLOSE_CONNECT "Off" //發送關閉指令給客戶端,讓客戶端主動斷開

int count_OPEN = 0;

int count_R1 = -1; //第一次進入打開

WiFiServer server(SERVER_PORT); //端口號,范圍 0-65535

// WiFiAPPSW是AP模式下的WiFi密碼

const String WiFiAPPSW = "12345678"; //設置AP模式下模塊所發出的WIFI的密碼

const String AP_NameString = "lizhiyong_CONTROL";

void setupWiFi() {
WiFi.mode(WIFI_AP);

WiFi.softAP(AP_NameString, WiFiAPPSW);

//自定義IP地址信息

WiFi.softAPConfig(IPAddress(192, ***, ***, ***), IPAddress(192, ***, ***, 1), IPAddress(255, 255, 255, 0));

Serial.println(WiFi.softAPSSID());

Serial.print("IP address: ");

Serial.println(WiFi.softAPIP());

Serial.print("SSID: ");

Serial.println(WiFi.softAPSSID());

server.begin();

}

void setup() {
pinMode(PIN_R1, OUTPUT); *

pinMode(PIN_R2, OUTPUT); *

*

*

Serial.begin(115200);

Serial.println("Begin now!!!");

setupWiFi();

}

WiFiClient serverClient;

void loop() {
//檢測服務器端是否有活動的客戶端連接

if (server.hasClient()) {
if (serverClient) serverClient.stop();

serverClient = server.available();

// Serial.println("hasClient " + serverClient.remoteIP());

}


//檢查客戶端的數據

if (serverClient && serverClient.connected()) {
if (serverClient.available()) {
Serial.print("Connected to client remoteIP:");

Serial.println(serverClient.remoteIP());

char data[1024] = { 0 };

// ind用于追蹤data數組中已存儲的數據量

int ind = 0;

// 接收客戶端發送的所有數據

Serial.println("Connected to client !!! ");

while (serverClient.available()) {
data[ind] = serverClient.read(); //讀取client端發送的字符,含有換行符

ind++;

}

String str = String(data);

Serial.println(str + String(str.length()));

if (str.indexOf("open") >= 0) { // compareTo equals 接收有回車符等不可見字符容易出錯

Serial.println("relay2 open is recive");

ticker_2.attach(0.1, relay2, 0); //二號繼電器打開。參數1

serverClient.print("relay2 open OK! "); //在client端回復

} else if (str.indexOf("close") >= 0) {
Serial.println("relay2 close is recive");

ticker_2.attach(0.1, relay2, 1); //參數0關斷

serverClient.print("relay2 close OK! "); //在client端回復

} else if (str.indexOf("time") >= 0) { //relay1打開后延時關閉

int time = str.substring(4).toInt(); //substring(4)從第4個數開始一直都末尾

ticker_1.attach(0.1, relay1, time); //繼電器 打開,延時time 后關閉,第一次執行沒有延時,

Serial.println("relay1 close is recive " + str.substring(4));

serverClient.print("relay1 time OK! "); //在client端回復

} else if (str.indexOf("hand") >= 0) { //relay1手動開關

Serial.println("relay1 hand " + String(count_R1));

if (count_R1 == -1) {
ticker_1.attach(0.1, relay1, -1); //手動打開關閉

Serial.println("relay1 hand open " + String(count_R1));

serverClient.print("relay1 hand open OK! "); //在client端回復

count_R1 = 0;

} else {
ticker_1.attach(0.1, relay1, 0); //-1 關閉指令

Serial.println("relay1 hand close ");

serverClient.print("relay1 hand close OK! "); //在client端回復

count_R1 = -1;

}

} else {
serverClient.print("OK! Got your request. "); //在client端回復

Serial.println("OK! Got your request. ");

}

serverClient.print(CLOSE_CONNECT); //在客戶端關閉端回復

}

}

}

void relay1(int action) { //控制繼電器1,參數整數型,0表示關,-1表示開,其他數值表示開的延時

Serial.println("relay1 active !!! " + String(action));

if (action == 0) {
digitalWrite(PIN_R1, !digitalRead(PIN_R1)); // turn the LED on (HIGH is the voltage level)

Serial.println("relay1 open PIN_R1 !!! ");

ticker_1.detach();

} else if (action == -1) {
digitalWrite(PIN_R1, !digitalRead(PIN_R1)); // turn the LED off by making the voltage LOW

Serial.println("relay1 close PIN_R1 !!! ");

ticker_1.detach();

} else {
if (count_OPEN == 0) { //第一次 延時開,打開繼電器

ticker_1.attach(action, relay1, action); //保證下次進來,并且把時間延長,因為第一次進沒有延時

digitalWrite(PIN_R1, !digitalRead(PIN_R1));

Serial.println(String(action) + " relay1 open !!! ");

count_OPEN = 1;

} else { //第二次延時關,關閉繼電器

digitalWrite(PIN_R1, !digitalRead(PIN_R1));

count_OPEN = 0;

ticker_1.detach();

Serial.println(String(action) + " relay1 close !!! ");

}

}

}

void relay2(int level) { //控制繼電器2,參數是高低電平,決定吸合

digitalWrite(PIN_R2, level); // turn the LED on (HIGH is the voltage level)

Serial.println("relay2 active !!! " + String(level));

ticker_2.detach(); //都是執行一次,模擬多線程,用delay會阻塞服務器響應

}


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 繼電器
    +關注

    關注

    132

    文章

    5355

    瀏覽量

    149217
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1374

    瀏覽量

    79147
  • 源碼
    +關注

    關注

    8

    文章

    647

    瀏覽量

    29293
  • ESP32
    +關注

    關注

    18

    文章

    971

    瀏覽量

    17369
收藏 人收藏

    評論

    相關推薦

    ESP32作為STA時連接不上另一作為APESP32,為什么?

    使用的是ESP32 CSI Toolkit的官方代碼,想要實現ESP32分別作為AP 和STA能互連,并且收集CSI。目前遇到的問題是:ESP32作為STA時能連接我自己的手機
    發表于 06-19 06:39

    ESP32熱點時,用蘋果手機連接模塊,為什么在斷開時檢測不到

    ESP32熱點時,如果用安卓手機或者電腦連接模塊,在斷開連接時,模塊能檢測到安卓手機/電腦斷開了。但是用蘋果手機連接模塊,在斷開時,模塊好像經常檢測不到蘋果手機斷開了。是通過
    發表于 06-26 07:29

    ESP32會不會有多線程問題,需要加鎖嗎?

    ESP32會不會有多線程問題,需要加鎖嗎
    發表于 07-19 08:05

    ESP32多線程 #硬聲創作季

    ESP多線程
    Hello,World!
    發布于 :2022年09月23日 20:47:12

    哪位朋友可以提供一個用LABWINDOWS多線程控制儀器的例子?

    哪位朋友可以提供一個用LABWINDOWS多線程控制儀器的例子?能檢測2個以上設備接入斷開不崩潰測試過程儀器突發故障能應對,系統不崩潰測量結果可以實時顯示
    發表于 10-30 08:45

    請問arduino如何能實現多線程控制

    請教一下,arduino如何能實現多線程控制 ???
    發表于 07-27 23:51

    micropython esp32刷固件adc多線程如何去實現呢

    micropython esp32刷固件adc多線程如何去實現呢?
    發表于 01-25 06:09

    ESP32作為STA時連接不上另一作為APESP32是哪里的問題?

    使用的是ESP32 CSI Toolkit的官方代碼,想要實現ESP32分別作為AP 和STA能互連,并且收集CSI。目前遇到的問題是:ESP32作為STA時能連接我自己的手機
    發表于 02-16 08:09

    如何使用std::future/std::promise 和 std::packaged_task來促進esp32上的多線程

    我正在考慮使用 std::future/std::promise 和 std::packaged_task 來促進 esp32 上的多線程。我知道多任務函數之間的抽象分層如下:std::thread
    發表于 03-02 08:44

    基于多線程的雷達數據實時處理系統

    為了解決多普勒天氣雷達實時處理系統研發過程中并發線程難以進行控制的問題,設計了一種多線程控制
    發表于 12-01 17:02 ?18次下載
    基于<b class='flag-5'>多線程</b>的雷達數據實時處理系統

    ESP32驅動1.54寸彩屏的應用

    前段時間,ESP32憑借替代AP6212的完美性,以及驅動各種規格彩屏的全能性等技能,收獲到了一大波粉絲。如今,ESP32又上了物聯網熱點,它對外宣稱自己在彩屏應用上又有了新手筆!
    發表于 06-28 11:32 ?2107次閱讀

    四、ESP32單片機wifi的AP與STA模式使用

    ESP32單片機wifi的AP與STA模式使用關于WIFI的AP與STA簡介ESP32串口通信ESP32開啟
    發表于 11-26 17:51 ?90次下載
    四、<b class='flag-5'>ESP32</b>單片機wifi的<b class='flag-5'>AP</b>與STA模式使用

    使用MicroPython在Raspberry Pi上通過雙核編程的多線程控制LED

    在本教程中,我們將使用 MicroPython在 Raspberry Pi Pico 上通過雙核編程的多線程控制兩個 LED 。
    的頭像 發表于 07-25 17:41 ?7519次閱讀
    使用MicroPython在Raspberry Pi上通過雙核編程的<b class='flag-5'>多線程控制</b>LED

    使用ESP32、Python和javascript的遠程控制繼電器

    電子發燒友網站提供《使用ESP32、Python和javascript的遠程控制繼電器.zip》資料免費下載
    發表于 11-10 10:27 ?1次下載
    使用<b class='flag-5'>ESP32</b>、Python和javascript的遠<b class='flag-5'>程控制</b>繼電器

    使用ESP32連接騰訊云實現遠程控制

    上次給大家分享了如何使用ESP32實現藍牙通信,今天跟大家聊聊如何使用ESP32連接騰訊云實現遠程控制。本次實驗用到MQTT協議,同樣,我用miropython編寫程序實現,最終可以通過騰訊連連微信
    的頭像 發表于 11-22 09:19 ?3724次閱讀
    主站蜘蛛池模板: ZZoo兽2皇| 日韩爽爽影院在线播放| 在线二区 中文 无码| 且试天下芒果免费观看| 激情床戏视频片段有叫声| 把腿张开老子CAO烂你动态图| 一本色道久久88加勒比—综合| 日韩精品一区二区三区AV在线观看| 久久免费资源福利资源站| 国产精品18久久久久久欧美网址 | 小萝ar视频网站| 日本高清在线一区二区三区| 久久亚洲高清观看| 国产在线精品一区二区在线看| 成人免费看片45分钟| 4虎最新网址| 在线 自拍 综合 亚洲 欧美| 星空无限传媒视频在线观看视频| 秋霞最新高清无码鲁丝片| 两个洞一起插哦!好刺激| 国产一区二区三区国产精品| 公和熄洗澡三级中文字幕| wwww晚晚干| av影音先锋天堂网| 91视频18| 综合激情区视频一区视频二区| 亚洲色婷婷久久精品AV蜜桃| 无毒成人社区| 四虎国产精品永久免费入口| 日本2021免费一二三四区| 欧美A级肉欲大片XXX| 某上海少妇3P黑人完整版BD| 久久秋霞理伦片| 久久精品一区二区三区资源网| 狠狠色狠狠色综合曰曰| 国产亚洲精品久久无亚洲| 国产精品自在自线亚洲| 国产乱码精品AAAAAAAA| 国产精品爽爽久久久久久蜜桃网站| 国产成人99久久亚洲综合精品| 宫交拔不出来了h黑人|