91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

網(wǎng)上找不到的源碼,ESP32 AP熱點(diǎn) TCPsever 多線程控制開(kāi)關(guān)

李智勇06 ? 來(lái)源:李智勇06 ? 作者:李智勇06 ? 2024-06-11 08:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

#include //如果是ESP8266 用#include

#include "Ticker.h"

//李智勇編碼,采用AP方式做服務(wù)端,可以方便控制各種設(shè)備,網(wǎng)上此方面的代碼放出不多不完整,在此放出, 沒(méi)有采用網(wǎng)上流行的多個(gè)客戶端,那樣當(dāng)新的客戶端不夠用時(shí),處理邏輯太麻煩,一個(gè)客戶端發(fā)過(guò)來(lái)消息,服務(wù)端接收,發(fā)送確認(rèn)消息,等控制指令結(jié)束發(fā)送斷開(kāi)指令給客戶端,當(dāng)服務(wù)端接到新的連接,主動(dòng)斷開(kāi)上個(gè)連接,這樣就不會(huì)阻塞網(wǎng)絡(luò)連接。

Ticker ticker_1; //控制一號(hào)繼電器,用計(jì)時(shí)器模擬多線程

Ticker ticker_2; //控制二號(hào)繼電器

#define PIN_R1 23 //輸出控制,

#define PIN_R2 22 //輸出控制,

// 初始化一個(gè)WiFi服務(wù)器,端口為****

#define SERVER_PORT ****

#define CLOSE_CONNECT "Off" //發(fā)送關(guān)閉指令給客戶端,讓客戶端主動(dòng)斷開(kāi)

int count_OPEN = 0;

int count_R1 = -1; //第一次進(jìn)入打開(kāi)

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

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

const String WiFiAPPSW = "12345678"; //設(shè)置AP模式下模塊所發(fā)出的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() {
//檢測(cè)服務(wù)器端是否有活動(dòng)的客戶端連接

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

serverClient = server.available();

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

}


//檢查客戶端的數(shù)據(jù)

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

Serial.println(serverClient.remoteIP());

char data[1024] = { 0 };

// ind用于追蹤data數(shù)組中已存儲(chǔ)的數(shù)據(jù)量

int ind = 0;

// 接收客戶端發(fā)送的所有數(shù)據(jù)

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

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

ind++;

}

String str = String(data);

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

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

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

ticker_2.attach(0.1, relay2, 0); //二號(hào)繼電器打開(kāi)。參數(shù)1

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

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

ticker_2.attach(0.1, relay2, 1); //參數(shù)0關(guān)斷

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

} else if (str.indexOf("time") >= 0) { //relay1打開(kāi)后延時(shí)關(guān)閉

int time = str.substring(4).toInt(); //substring(4)從第4個(gè)數(shù)開(kāi)始一直都末尾

ticker_1.attach(0.1, relay1, time); //繼電器 打開(kāi),延時(shí)time 后關(guān)閉,第一次執(zhí)行沒(méi)有延時(shí),

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

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

} else if (str.indexOf("hand") >= 0) { //relay1手動(dòng)開(kāi)關(guān)

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

if (count_R1 == -1) {
ticker_1.attach(0.1, relay1, -1); //手動(dòng)打開(kāi)關(guān)閉

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

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

count_R1 = 0;

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

Serial.println("relay1 hand close ");

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

count_R1 = -1;

}

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

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

}

serverClient.print(CLOSE_CONNECT); //在客戶端關(guān)閉端回復(fù)

}

}

}

void relay1(int action) { //控制繼電器1,參數(shù)整數(shù)型,0表示關(guān),-1表示開(kāi),其他數(shù)值表示開(kāi)的延時(shí)

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) { //第一次 延時(shí)開(kāi),打開(kāi)繼電器

ticker_1.attach(action, relay1, action); //保證下次進(jìn)來(lái),并且把時(shí)間延長(zhǎng),因?yàn)榈谝淮芜M(jìn)沒(méi)有延時(shí)

digitalWrite(PIN_R1, !digitalRead(PIN_R1));

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

count_OPEN = 1;

} else { //第二次延時(shí)關(guān),關(guān)閉繼電器

digitalWrite(PIN_R1, !digitalRead(PIN_R1));

count_OPEN = 0;

ticker_1.detach();

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

}

}

}

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

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

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

ticker_2.detach(); //都是執(zhí)行一次,模擬多線程,用delay會(huì)阻塞服務(wù)器響應(yīng)

}


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 繼電器
    +關(guān)注

    關(guān)注

    133

    文章

    5566

    瀏覽量

    154847
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1425

    瀏覽量

    83549
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    685

    瀏覽量

    31338
  • ESP32
    +關(guān)注

    關(guān)注

    26

    文章

    1198

    瀏覽量

    21811
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    ESP32熱點(diǎn)時(shí),用蘋(píng)果手機(jī)連接模塊,為什么在斷開(kāi)時(shí)檢測(cè)不到

    ESP32熱點(diǎn)時(shí),如果用安卓手機(jī)或者電腦連接模塊,在斷開(kāi)連接時(shí),模塊能檢測(cè)到安卓手機(jī)/電腦斷開(kāi)了。但是用蘋(píng)果手機(jī)連接模塊,在斷開(kāi)時(shí),模塊好像經(jīng)常檢測(cè)不到蘋(píng)果手機(jī)斷開(kāi)了。是通過(guò)
    發(fā)表于 06-26 07:29

    ESP32會(huì)不會(huì)有多線程問(wèn)題,需要加鎖嗎?

    ESP32會(huì)不會(huì)有多線程問(wèn)題,需要加鎖嗎
    發(fā)表于 07-19 08:05

    ESP32多線程 #硬聲創(chuàng)作季

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

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

    哪位朋友可以提供一個(gè)用LABWINDOWS多線程控制儀器的例子?能檢測(cè)2個(gè)以上設(shè)備接入斷開(kāi)不崩潰測(cè)試過(guò)程儀器突發(fā)故障能應(yīng)對(duì),系統(tǒng)不崩潰測(cè)量結(jié)果可以實(shí)時(shí)顯示
    發(fā)表于 10-30 08:45

    請(qǐng)問(wèn)arduino如何能實(shí)現(xiàn)多線程控制 ?

    請(qǐng)教一下,arduino如何能實(shí)現(xiàn)多線程控制 ???
    發(fā)表于 07-27 23:51

    micropython esp32刷固件adc多線程如何去實(shí)現(xiàn)呢

    micropython esp32刷固件adc多線程如何去實(shí)現(xiàn)呢?
    發(fā)表于 01-25 06:09

    ESP32作為STA時(shí)連接不上另一作為APESP32是哪里的問(wèn)題?

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

    如何使用std::future/std::promise 和 std::packaged_task來(lái)促進(jìn)esp32上的多線程

    我正在考慮使用 std::future/std::promise 和 std::packaged_task 來(lái)促進(jìn) esp32 上的多線程。我知道多任務(wù)函數(shù)之間的抽象分層如下:std::thread
    發(fā)表于 03-02 08:44

    基于多線程的雷達(dá)數(shù)據(jù)實(shí)時(shí)處理系統(tǒng)

    為了解決多普勒天氣雷達(dá)實(shí)時(shí)處理系統(tǒng)研發(fā)過(guò)程中并發(fā)線程難以進(jìn)行控制的問(wèn)題,設(shè)計(jì)了一種多線程控制
    發(fā)表于 12-01 17:02 ?18次下載
    基于<b class='flag-5'>多線程</b>的雷達(dá)數(shù)據(jù)實(shí)時(shí)處理系統(tǒng)

    ESP32驅(qū)動(dòng)1.54寸彩屏的應(yīng)用

    前段時(shí)間,ESP32憑借替代AP6212的完美性,以及驅(qū)動(dòng)各種規(guī)格彩屏的全能性等技能,收獲到了一大波粉絲。如今,ESP32又上了物聯(lián)網(wǎng)熱點(diǎn),它對(duì)外宣稱(chēng)自己在彩屏應(yīng)用上又有了新手筆!
    發(fā)表于 06-28 11:32 ?2707次閱讀

    四、ESP32單片機(jī)wifi的AP與STA模式使用

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

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

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

    使用ESP32、Python和javascript的遠(yuǎn)程控制繼電器

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

    使用ESP32連接騰訊云實(shí)現(xiàn)遠(yuǎn)程控制

    上次給大家分享了如何使用ESP32實(shí)現(xiàn)藍(lán)牙通信,今天跟大家聊聊如何使用ESP32連接騰訊云實(shí)現(xiàn)遠(yuǎn)程控制。本次實(shí)驗(yàn)用到MQTT協(xié)議,同樣,我用miropython編寫(xiě)程序?qū)崿F(xiàn),最終可以通過(guò)騰訊連連微信
    的頭像 發(fā)表于 11-22 09:19 ?5733次閱讀