在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

遠程控制通訊--基于Arduino + ESP8266控制LED燈

算法&編程學院 ? 來源:網絡整理 ? 2018-02-27 09:10 ? 次閱讀

Arduino是許多智能硬件愛好者的首選,使用簡單快捷,而ESP8266模塊也是當前最為熱門的WIFI模塊。本項目完成了Arduino使用EDP協議通過ESP8266 WIFI模塊接入OneNET服務器,并通過在接入設備中創建的應用來實現遠程控制LED燈。

【1】硬件連接:

準備元件:

Arduino UNO

ESP8266 WIFI模塊

USB轉TTL連接線

硬件連線:

Arduino UNO USB轉TTL

D2-----------------RX

D3-----------------TX

GND---------------GND

Arduino UNO ESP8266

RX-----------------TX

TX-----------------RX

GND---------------GND

其中USB轉TTL連接電腦用于調試打印輸出,然后Arduino的串口連接ESP8266的串口。

實物連接如下如圖所示:

【2】ESP8266配置和EDP上傳數據介紹:

選用ESP8266串口WIFI模塊,通過AT指令控制WIFI模塊接入互聯網,依次完成與接入互聯網、與OneNet服務器建立TCP連接、傳輸數據等操作。

1)配置WIFI模塊;

模塊配置接入OneNet,依次發送如下幾個命令到WIFI模塊:

AT+CWMODE=3

AT+RST

AT+CIFSR

AT+CWJAP=“your ssid”,“password”

2)和OneNet服務器建立TCP連接,依次發送命令:

AT+CIPSTART=“TCP”,“183.230.40.39”,876 //和服務器建立TCP連接

AT+CIPMODE=1 //進入透明傳輸模式

AT+CIPSEND //開始傳輸

命令執行結果如下圖所示:

【3】創建設備和應用:

添加產品并創建接入設備,詳細創建步驟請查看:http://open.iot.10086.cn/doc/art243.html#66。其中數據傳輸協議選擇EDP。

在設備中添加應用,創建一個開關控件,在右側的屬性中選擇對應設備的switch0數據流 ·注意到屬性中有開關開值和開關關值兩個屬性,分別默認為1,0,這里不做修改(因為代碼中1為開,非1則為關) ·修改EDP命令內容為switch0:{v}(與代碼對應,代碼中會將冒號前的部分作為上傳的數據流ID,而將冒號之后的部分作為上傳是數據值) 這里的{v}是通配符當下發命令的時候,他將會被開關的開/關值取代,稍后我們將看到命令的內容。

編輯完成后點擊保存應用。

【4】軟件代碼:

其中Arduino開發板的D13作為被控制的LED燈,在程序中添加設備ID和APIKey。

/*
采用外接電源單獨供電,2 3口作為軟串口接PC機作為調試端
1 0為串口,連接WIFI模塊
*/
#include
#include "edp.c"
#define KEY "XpAhYrqhsZbk9eVqESnMJznDb3A=" //APIkey
#define ID "4051313" //設備ID
//#define PUSH_ID "680788"
#define PUSH_ID NULL
// 串口
#define _baudrate 115200
#define _rxpin 3
#define _txpin 2
#define WIFI_UART Serial
#define DBG_UART dbgSerial //調試打印串口
SoftwareSerial dbgSerial( _rxpin, _txpin ); // 軟串口,調試打印
edp_pkt *pkt;
/*
* doCmdOk
* 發送命令至模塊,從回復中獲取期待的關鍵字
* keyword: 所期待的關鍵字
* 成功找到關鍵字返回true,否則返回false
*/
bool doCmdOk(String data, char *keyword)
{
bool result = false;
if (data != "") //對于tcp連接命令,直接等待第二次回復
{
WIFI_UART.println(data); //發送AT指令
DBG_UART.print("SEND: ");
DBG_UART.println(data);
}
if (data == "AT") //檢查模塊存在
delay(2000);
else
while (!WIFI_UART.available()); // 等待模塊回復
delay(200);
if (WIFI_UART.find(keyword)) //返回值判斷
{
DBG_UART.println("do cmd OK");
result = true;
}
else
{
DBG_UART.println("do cmd ERROR");
result = false;
}
while (WIFI_UART.available()) WIFI_UART.read(); //清空串口接收緩存
delay(500); //指令時間間隔
return result;
}
void setup()
{
char buf[100] = {0};
int tmp;
pinMode(13, OUTPUT); //WIFI模塊指示燈
pinMode(8, OUTPUT); //用于連接EDP控制的發光二極管
WIFI_UART.begin( _baudrate );
DBG_UART.begin( _baudrate );
WIFI_UART.setTimeout(3000); //設置find超時時間
delay(3000);
DBG_UART.println("hello world!");
delay(2000);
while (!doCmdOk("AT", "OK"));
digitalWrite(13, HIGH); // 使Led亮
while (!doCmdOk("AT+CWMODE=3", "OK")); //工作模式
while (!doCmdOk("AT+CWJAP="PDCN","1234567890"", "OK"));
while (!doCmdOk("AT+CIPSTART="TCP","183.230.40.39",876", "CONNECT"));
while (!doCmdOk("AT+CIPMODE=1", "OK")); //透傳模式
while (!doCmdOk("AT+CIPSEND", ">")); //開始發送
}
void loop()
{
static int edp_connect = 0;
bool trigger = false;
edp_pkt rcv_pkt;
unsigned char pkt_type;
int i, tmp;
char num[10];
/* EDP 連接 */
if (!edp_connect)
{
while (WIFI_UART.available()) WIFI_UART.read(); //清空串口接收緩存
packetSend(packetConnect(ID, KEY)); //發送EPD連接包
while (!WIFI_UART.available()); //等待EDP連接應答
if ((tmp = WIFI_UART.readBytes(rcv_pkt.data, sizeof(rcv_pkt.data))) > 0 )
{
rcvDebug(rcv_pkt.data, tmp);
if (rcv_pkt.data[0] == 0x20 && rcv_pkt.data[2] == 0x00 && rcv_pkt.data[3] == 0x00)
{
edp_connect = 1;
DBG_UART.println("EDP connected.");
}
else
DBG_UART.println("EDP connect error.");
}
packetClear(&rcv_pkt);
}
while (WIFI_UART.available())
{
readEdpPkt(&rcv_pkt);
if (isEdpPkt(&rcv_pkt))
{
pkt_type = rcv_pkt.data[0];
switch (pkt_type)
{
case CMDREQ:
char edp_command[50];
char edp_cmd_id[40];
long id_len, cmd_len, rm_len;
char datastr[20];
char val[10];
memset(edp_command, 0, sizeof(edp_command));
memset(edp_cmd_id, 0, sizeof(edp_cmd_id));
edpCommandReqParse(&rcv_pkt, edp_cmd_id, edp_command, &rm_len, &id_len, &cmd_len);
DBG_UART.print("rm_len: ");
DBG_UART.println(rm_len, DEC);
delay(10);
DBG_UART.print("id_len: ");
DBG_UART.println(id_len, DEC);
delay(10);
DBG_UART.print("cmd_len: ");
DBG_UART.println(cmd_len, DEC);
delay(10);
DBG_UART.print("id: ");
DBG_UART.println(edp_cmd_id);
delay(10);
DBG_UART.print("cmd: ");
DBG_UART.println(edp_command);
//數據處理與應用中EDP命令內容對應
//本例中格式為 datastream:[1/0]
sscanf(edp_command, "%[^:]:%s", datastr, val);
if (atoi(val) == 1)
digitalWrite(13, HIGH); // 使Led亮
else
digitalWrite(13, LOW); // 使Led滅
packetSend(packetDataSaveTrans(NULL, datastr, val)); //將新數據值上傳至數據流
break;
default:
DBG_UART.print("unknown type: ");
DBG_UART.println(pkt_type, HEX);
break;
}
}
//delay(4);
}
if (rcv_pkt.len > 0)
packetClear(&rcv_pkt);
delay(150);
}
/*
* readEdpPkt
* 從串口緩存中讀數據到接收緩存
*/
bool readEdpPkt(edp_pkt *p)
{
int tmp;
if ((tmp = WIFI_UART.readBytes(p->data + p->len, sizeof(p->data))) > 0 )
{
rcvDebug(p->data + p->len, tmp);
p->len += tmp;
}
return true;
}
/*
* packetSend
* 將待發數據發送至串口,并釋放到動態分配的內存
*/
void packetSend(edp_pkt* pkt)
{
if (pkt != NULL)
{
WIFI_UART.write(pkt->data, pkt->len); //串口發送
WIFI_UART.flush();
free(pkt); //回收內存
}
}
void rcvDebug(unsigned char *rcv, int len)
{
int i;
DBG_UART.print("rcv len: ");
DBG_UART.println(len, DEC);
for (i = 0; i < len; i++)
{
DBG_UART.print(rcv[i], HEX);
DBG_UART.print(" ");
}
DBG_UART.println("");
}

【5】功能測試:

設備上電后,可以看到電腦串口打印輸出的內容,首先連接OneNET服務器:

連接成功后,可以看到設備在線狀態:

點擊設備應用中的開關按鈕,發送開關命令給設備:

設備接收命令后進行解析,并在串口打印輸出:

當解析到數據流switch0的值為1時設備開燈,Arduino 開發板的D13被點亮,相反為0時燈滅。


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

    關注

    189

    文章

    6493

    瀏覽量

    190274
  • ESP8266
    +關注

    關注

    51

    文章

    965

    瀏覽量

    47053
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    ESP8266 通過 MQTT 協議實現 LED遠程控制

    本文簡要介紹了搭建 EMQX 服務器實現基于 MQTT 協議遠程控制 NodeMCU ESP8266 板載 LED 的解決方案。
    的頭像 發表于 09-25 09:11 ?2915次閱讀
    <b class='flag-5'>ESP8266</b> 通過 MQTT 協議實現 <b class='flag-5'>LED</b> 的<b class='flag-5'>遠程控制</b>

    ESP8266模塊想實現手機遠程控制

    arduino開發板,ESP8266WiFi模塊想實現手機遠程控制,哪位大神有這方面的經驗資料,幫忙發一份吧,拜求
    發表于 05-08 17:50

    如何使用EDP協議通過ESP8266 WIFI模塊接入OneNET服務器來實現遠程控制LED

    本項目完成了Arduino使用EDP協議通過ESP8266 WIFI模塊接入OneNET服務器,并通過在接入設備中創建的應用來實現遠程控制LED
    發表于 06-16 08:29

    如何利用STM32+ESP8266去實現遠程控制LED

    如何利用STM32+ESP8266去實現遠程控制LED呢?有哪些基本步驟?
    發表于 12-08 07:26

    ESP8266遠程控制開關的方法分享

    ESP8266遠程控制開關示例超全面詳細1 背景描述ESP8266模塊是比較標準方便的wifi開發模塊,把他當做為單片機,有輸入輸出引腳和操作指令、內存,就是一個計算機了。引腳收發接口可做串口
    發表于 02-28 14:34

    esp8266控制led51單片機底層程序資料下載

    esp8266控制led51單片機底層程序可以控制led亮滅,親測可行
    發表于 02-27 15:00 ?61次下載

    ESP8266制作能通過手機遠程控制的智能插座

    ESP8266制作智能插座!手機遠程控制,讓家電瘋狂起來~
    的頭像 發表于 06-04 06:26 ?7049次閱讀

    Arduino 編程 ESP8266 12F NodeMCU 實現 PWM 控制呼吸

    Arduino 編程 ESP8266 12F NodeMCU 實現 PWM 控制呼吸
    發表于 11-18 19:21 ?47次下載
    <b class='flag-5'>Arduino</b> 編程 <b class='flag-5'>ESP8266</b> 12F NodeMCU 實現 PWM <b class='flag-5'>控制</b>呼吸<b class='flag-5'>燈</b>

    esp筆記(2)使用Arduino IDE 開發 esp8266

    LEDEsp8266 V3 開發板V3 開發板的MCU為esp8266,并且板載了USB轉串口模塊,使得我們可以通過串口打印將數據發送到PC中,GPIO2口還連接了...
    發表于 12-05 14:51 ?55次下載
    <b class='flag-5'>esp</b>筆記(2)使用<b class='flag-5'>Arduino</b> IDE 開發 <b class='flag-5'>esp8266</b>

    遠程控制)App inventor 編寫安卓app控制 ESP8266

    App inventor 編寫安卓app控制 ESP8266第一 下載ESP8266示例(arduino ide 編程開發)第二 修改demo例程第三 app inventor 開發原
    發表于 12-08 17:06 ?29次下載
    (<b class='flag-5'>遠程控制</b>)App inventor 編寫安卓app<b class='flag-5'>控制</b> <b class='flag-5'>ESP8266</b>

    最簡單DIY基于ESP8266的智能彩燈②(在網頁用按鍵和滑動條控制RGB

    和滑動條控制RGB)文章目錄ESP8266ESP32智能彩燈開發系列文章目錄前言一、最簡單DIY基于ESP8266的智能彩燈②(在網頁用
    發表于 12-29 19:02 ?7次下載
    最簡單DIY基于<b class='flag-5'>ESP8266</b>的智能彩燈②(在網頁用按鍵和滑動條<b class='flag-5'>控制</b>RGB<b class='flag-5'>燈</b>)

    使用ESP8266 wifi DIY控制

    電子發燒友網站提供《使用ESP8266 wifi DIY控制.zip》資料免費下載
    發表于 07-25 09:18 ?15次下載
    使用<b class='flag-5'>ESP8266</b> wifi DIY<b class='flag-5'>控制</b><b class='flag-5'>燈</b>

    ESP8266 Arduino通訊

    電子發燒友網站提供《ESP8266 Arduino通訊.zip》資料免費下載
    發表于 11-15 09:38 ?16次下載
    <b class='flag-5'>ESP8266</b> <b class='flag-5'>Arduino</b><b class='flag-5'>通訊</b>

    ESP8266 01S繼電器控制智能實現

    是GPIO3接繼電器控制端,繼電器選 擇常閉端接線高電平觸發,控制LED亮滅。 補充說明:①市面上的LED
    發表于 04-27 11:31 ?7次下載
    <b class='flag-5'>ESP8266</b> 01S繼電器<b class='flag-5'>控制</b>智能<b class='flag-5'>燈</b>實現

    帶有Blynk和IR的Arduino ESP8266控制繼電器

    電子發燒友網站提供《帶有Blynk和IR的Arduino ESP8266控制繼電器.zip》資料免費下載
    發表于 06-30 10:31 ?0次下載
    帶有Blynk和IR的<b class='flag-5'>Arduino</b> <b class='flag-5'>ESP8266</b><b class='flag-5'>控制</b>繼電器
    主站蜘蛛池模板: 国产高清在线看 | 中文字幕在线二区 | www.av小视频| 亚洲一区日韩一区欧美一区a | 天天摸日日添狠狠添婷婷 | 四虎在线观看免费视频 | 免费任我爽橹视频在线观看 | 国产情侣出租屋露脸实拍 | 国产三级在线观看播放 | 女上男下边吃奶边做视频成都 | 人人插人人射 | 亚洲男人的天堂成人 | 欧美猛交lxxxxxxxxx | 爱爱毛片 | 午夜精品久久久久蜜桃 | 国产成都一二三四区 | 午夜欧美性欧美 | 深夜动态福利gif进出粗暴 | 不良视频在线观看 | 天天天射 | 日本三级全黄 | 欧洲乱码专区一区二区三区四区 | 深夜视频免费看 | 中文字幕一区二区三区不卡 | 你懂的在线观看网站 | 色女孩网站 | bt磁力在线搜索 | 免费日本网站 | 国产在线视频网站 | 成人在线91| 国产黄色在线观看 | 欧美xxxx性高清 | 狠狠躁夜夜躁人人爽天天天天 | 天天综合天天综合 | 97视频人人| 视频亚洲一区 | 欧美高h | japanese色系国产在线高清 | 国产三级在线观看播放 | 婷婷丁香九月 | 免费一级特黄 欧美大片 |