RM新时代网站-首页

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

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

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

CC2530采用ESP8266與手機APP通信

DS小龍哥-嵌入式技術(shù) ? 來源:DS小龍哥-嵌入式技術(shù) ? 作者:DS小龍哥-嵌入式技 ? 2023-05-23 09:15 ? 次閱讀

一、案例介紹

下面是一個基于CC2530和ESP8266的項目示例,它演示了如何使用CC2530與ESP8266通信以及使用AT指令控制其WiFi模塊設(shè)置和數(shù)據(jù)傳輸。

項目概述: 項目實現(xiàn)通過CC2530控制ESP8266將其配置成AP+TCP服務(wù)器模式,并通過手機APP連接到TCP服務(wù)器并完成數(shù)據(jù)傳輸。ESP8266將作為一個熱點(AP)來工作,其WiFi模塊被配置為建立一個TCP服務(wù)器并監(jiān)聽端口號。CC2530將使用其串口與ESP8266進行通信,并通過AT指令控制ESP8266的WiFi模塊設(shè)置和數(shù)據(jù)傳輸。

硬件組件:

  1. CC2530芯片
  2. ESP8266 WiFi模塊
  3. USB轉(zhuǎn)TTL串口轉(zhuǎn)接板
  4. Android手機

軟件組件:

  1. IAR Embedded Workbench for 8051
  2. ESP8266 AT指令集
  3. Android Studio

實現(xiàn)步驟:

  1. 硬件連接: 將ESP8266模塊與USB轉(zhuǎn)TTL串口轉(zhuǎn)接板相連,然后將串口轉(zhuǎn)接板連接到PC上的USB接口。 在開發(fā)板上焊接CC2530,然后將其連接到ESP8266模塊的TXD和RXD引腳上(即CC2530的P0.2與P0.3引腳,分別連接到ESP8266的RXD和TXD引腳)。
  2. 配置ESP8266模塊: 使用串口工具連接到ESP8266模塊,然后根據(jù)AT指令集將其配置為AP+TCP服務(wù)器模式。例如,可以使用以下AT指令來配置ESP8266的WiFi模塊:
AT+CWMODE=3
AT+CWSAP="MyWiFi","12345678",1,0
AT+CIPMUX=1
AT+CIPSERVER=1,8080

其中,“MyWiFi”和“12345678”分別是熱點的名稱和密碼,“1”表示加密方式為WPA2-PSK,“0”表示不隱藏SSID,而“8080”則是TCP服務(wù)器監(jiān)聽的端口號。

編寫CC2530程序: 在IAR Embedded Workbench for 8051中創(chuàng)建一個新的工程,在其中添加串口驅(qū)動程序以及ESP8266通信所需的AT指令函數(shù)。然后,編寫主程序代碼來實現(xiàn)以下功能:

  • 初始化串口
  • 向ESP8266發(fā)送AT指令以配置其WiFi模塊
  • 等待ESP8266向CC2530發(fā)送TCP連接請求
  • 接受從ESP8266傳回的數(shù)據(jù)并將其顯示在串口工具中

以下是示例代碼的一部分,用于初始化串口并向ESP8266發(fā)送AT指令:

#include "uart.h"
#include 
?
// AT指令函數(shù)
void at_command(char* cmd)
{
  uart_puts(cmd);
  uart_puts("rn");
  delay_ms(1000);
}
?
int main()
{
  // 初始化串口
  uart_init();
  
  // 發(fā)送AT指令以配置ESP8266的WiFi模塊
  at_command("AT+CWMODE=3");
  at_command("AT+CWSAP="MyWiFi","12345678",1,0");
  at_command("AT+CIPMUX=1");
  at_command("AT+CIPSERVER=1,8080");
?
  while (1)
   {
    // 接受從ESP8266傳回的數(shù)據(jù)并將其顯示在串口工具中
    if (uart_available())
     {
      char c = uart_read();
      uart_putc(c);
     }
   }
?
  return 0;
}

二、CC2530與ESP8266科普

CC2530是德州儀器(Texas Instruments,簡稱TI公司推出的一款基于ZigBee協(xié)議的SoC單芯片解決方案,它集成了一個8051內(nèi)核、硬件AES加密加速器、具備豐富外設(shè)的低功耗射頻芯片和物理層。CC2530支持IEEE 802.15.4標(biāo)準(zhǔn)和ZigBee協(xié)議,并且具有低功耗、高可靠性和長距離等特點,廣泛應(yīng)用于物聯(lián)網(wǎng)、智能家居智能醫(yī)療、無線傳感網(wǎng)和工業(yè)自動化等領(lǐng)域。

ESP8266是一款由中國企業(yè)樂鑫(Espressif Systems)研發(fā)的超低功耗Wi-Fi芯片,被廣泛應(yīng)用于物聯(lián)網(wǎng)相關(guān)設(shè)備的開發(fā)中。該芯片采用Tensilica L106 32位處理器,內(nèi)置TCP/IP協(xié)議,可以實現(xiàn)Wi-Fi通信,同時也支持傳統(tǒng)的UART協(xié)議、SPI協(xié)議等串行通信方式。ESP8266芯片集成了射頻電路、天線、Flash存儲器和電源管理等,體積小巧、功耗低,具有高度集成性和低成本的特點。

ESP8266芯片的主要特點如下:

1. 支持802.11 b/g/n Wi-Fi協(xié)議,通信距離遠,數(shù)據(jù)傳輸速度快;
2. 內(nèi)置32位低功耗Tensilica L106 CPU,主頻可達80MHz;
3. 支持UART、SPI、I2C等多種串行通信協(xié)議;
4. 集成了高速緩存和SRAM,具有強大的處理性能和存儲能力;
5. 支持藍牙4.2、BLE等無線通信協(xié)議(部分型號支持);
6. 能夠與各種MCU傳感器等外設(shè)進行協(xié)同工作,大大降低了開發(fā)成本和門檻。

ESP8266芯片具有成本低、功耗低、尺寸小和易于開發(fā)等優(yōu)點,在物聯(lián)網(wǎng)、智能家居、智能手環(huán)、智能家電等領(lǐng)域廣泛應(yīng)用。同時,ESP8266芯片也被視為低功耗Wi-Fi IoT領(lǐng)域中的殺手锏,為物聯(lián)網(wǎng)設(shè)備的互聯(lián)提供了更為簡便、穩(wěn)定、高效的解決方案。

三、功能代碼實現(xiàn)介紹

在CC2530上實現(xiàn)控制ESP8266配置成AP+TCP服務(wù)器模式,與手機APP之間完成數(shù)據(jù)傳輸,需要使用CC2530的串口與ESP8266通信,以及使用ESP8266 AT指令控制ESP8266的WiFi模塊設(shè)置和數(shù)據(jù)的發(fā)送,代碼如下:

#include 
#include 
#include 
?
#define ESP_ON  P1_0 // ESP8266電源控制引腳
#define ESP_RST P1_1 // ESP8266復(fù)位引腳
#define UART_TX P0_2 // CC2530串口發(fā)送引腳
#define UART_RX P0_3 // CC2530串口接收引腳
?
// ESP8266 AT指令常用指令
const char* AT_RST = "AT+RST";
const char* AT_CWMODE = "AT+CWMODE=3"; // 設(shè)置ESP8266為AP+STA模式
const char* AT_CWSAP = "AT+CWSAP="ssid","pass",1,3"; // 設(shè)置ESP8266 AP模式下的WiFi名稱和密碼
const char* AT_CIPMUX = "AT+CIPMUX=1"; // 設(shè)置ESP8266多路連接模式
const char* AT_CIPSERVER = "AT+CIPSERVER=1,8888"; // 設(shè)置ESP8266 TCP服務(wù)器端口
const char* AT_CIPSEND = "AT+CIPSEND=0,50"; // 設(shè)定ESP8266發(fā)送數(shù)據(jù)的長度,50字節(jié)
?
// ESP8266 AT指令回應(yīng)標(biāo)志
const char* RESPONSE_OK = "OK"; // AT指令執(zhí)行成功
const char* RESPONSE_ERROR = "ERROR"; // AT指令執(zhí)行失敗
const char* RESPONSE_READY = "ready"; // ESP8266已經(jīng)準(zhǔn)備就緒
const char* RESPONSE_CONNECT = "CONNECT"; // ESP8266連接成功
const char* RESPONSE_CLOSED = "CLOSED"; // ESP8266連接關(guān)閉
?
// ESP8266的WIFI名稱和密碼
const char* SSID = "esp8266";
const char* PASSWORD = "wifipassword";
?
// 存儲ESP8266返回的數(shù)據(jù)
char response[100];
?
// 延時函數(shù)
void delay(int ms) {
  while (--ms > 0) __delay_cycles(48000);
}
?
// 向ESP8266發(fā)送AT指令,并獲取ESP8266的回應(yīng)
void sendATCommand(const char* cmd, uint8_t wait) {
  uint8_t i = 0;
  memset(response, 0, sizeof(response));
  printf("AT command: %sn", cmd);
  printf("AT response:n");
  while (cmd[i]) {
    while (!(UCA0IFG & UCTXIFG));
    UCA0TXBUF = cmd[i++];
   }
  while (wait && !(UCA0IFG & UCRXIFG));
  while (UCA0IFG & UCRXIFG) {
    if (response[0] == '?' && UCA0RXBUF != 'r' && UCA0RXBUF != 'n') {
      response[0] = UCA0RXBUF;
      response[1] = '?';
      continue;
     }
    if (strlen(response) < sizeof(response) - 1) {
? ? ? ? ? ? ?int len = strlen(response);
? ? ? ? ? ? ?response[len] = UCA0RXBUF;
? ? ? ? ? ? ?response[len + 1] = '?';
? ? ? ?  }
? ?  }
? ? ?printf("%s", response);
?}
??
?void main(void) {
? ? ?uint8_t retry = 5;
? ? ?_BIS_SR(GIE);
??
? ? ?// 配置IO口
? ? ?P1DIR |= BIT0 + BIT1;
? ? ?P1OUT &= ~(BIT0 + BIT1);
? ? ?P1OUT |= ESP_ON; // 打開ESP8266電源
? ? ?P1OUT &= ~ESP_RST; // 復(fù)位ESP8266
? ? ?delay(500);
? ? ?P1OUT |= ESP_RST;
? ? ?delay(1000);
??
? ? ?// 配置串口
? ? ?P0SEL |= BIT2 + BIT3;
? ? ?UCA0CTL1 = UCSSEL_2;
? ? ?UCA0BR0 = 130;
? ? ?UCA0BR1 = 6;
? ? ?UCA0MCTL = UCBRS_4;
??
? ? ?// 逐步執(zhí)行AT指令,確保每一步配置都執(zhí)行成功
? ? ?while (retry-- > 0) {
    sendATCommand(AT_RST, 1);
    sendATCommand(AT_CWMODE, 1);
    sendATCommand(AT_CWSAP, 1);
    sendATCommand(AT_CIPMUX, 1);
    sendATCommand(AT_CIPSERVER, 1);
    if (strstr(response, RESPONSE_OK) != NULL) break;
   }
  if (retry == 0) return; // 配置失敗,退出程序
?
  // 等待ESP8266準(zhǔn)備就緒
  while (1) {
    sendATCommand("", 1);
    if (strstr(response, RESPONSE_READY) != NULL) break;
    delay(500);
   }
?
  // 等待手機APP連接
  while (1) {
    sendATCommand("", 1);
    if (strstr(response, RESPONSE_CONNECT) != NULL) {
      printf("Client connected.n");
      // 發(fā)送數(shù)據(jù)
      sendATCommand(AT_CIPSEND, 0);
      while (!(UCA0IFG & UCTXIFG));
      UCA0TXBUF = 'H'; UCA0TXBUF = 'e';
      UCA0TXBUF = 'l'; UCA0TXBUF = 'l';
      UCA0TXBUF = 'o'; UCA0TXBUF = ',';
      UCA0TXBUF = 'W'; UCA0TXBUF = 'o';
      UCA0TXBUF = 'r'; UCA0TXBUF = 'l';
      UCA0TXBUF = 'd'; UCA0TXBUF = '!';
      delay(100); // 延時確保數(shù)據(jù)發(fā)送完成
      // 關(guān)閉連接
      sendATCommand("AT+CIPCLOSE=0", 1);
      printf("Client disconnected.n");
     }
    delay(10);
   }
}

這是CC2530的代碼,其中ESP8266的控制使用了AT指令。也就是說,ESP8266作為網(wǎng)絡(luò)模塊,只是負(fù)責(zé)在指定的端口上監(jiān)聽客戶端的連接和傳輸數(shù)據(jù),真正控制數(shù)據(jù)傳輸?shù)氖荂C2530,CC2530還要負(fù)責(zé)ESP8266的WiFi模塊設(shè)置和TCP服務(wù)器的建立。這里只是給出了用CC2530控制ESP8266的代碼,手機APP的代碼需要自行開發(fā)。

審核編輯:湯梓紅

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

    關(guān)注

    18

    文章

    6024

    瀏覽量

    135949
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2909

    文章

    44557

    瀏覽量

    372753
  • WIFI
    +關(guān)注

    關(guān)注

    81

    文章

    5296

    瀏覽量

    203569
  • 串口
    +關(guān)注

    關(guān)注

    14

    文章

    1551

    瀏覽量

    76421
  • ESP8266
    +關(guān)注

    關(guān)注

    50

    文章

    962

    瀏覽量

    44956
收藏 人收藏

    評論

    相關(guān)推薦

    基于CC2530(ZigBee設(shè)計)的溫度報警器

    這是基于CC2530設(shè)計的遠程溫度報警器,通過CC2530終端檢測環(huán)境溫度上傳給手機APP實時顯示。
    的頭像 發(fā)表于 05-27 09:54 ?8832次閱讀
    基于<b class='flag-5'>CC2530</b>(ZigBee設(shè)計)的溫度報警器

    如何讓esp8266 wifi模組和APP通信?

    esp8266 wifi模組用手機一鍵配網(wǎng)成功(station模式)后,wifi模組和手機所連wifi在一個局域網(wǎng)內(nèi),手機上有一個wifi APP
    發(fā)表于 06-27 00:32

    手機ESP8266模塊通信的過程分享

    手機ESP8266模塊通信本人在搞手機ESP8266通信
    發(fā)表于 02-15 06:38

    ESP8266_app控制三色燈sdk以及app源碼

    esp8266學(xué)習(xí)程序,通過手機APP來控制三色燈的變換,以及開關(guān)
    發(fā)表于 05-06 17:25 ?169次下載

    CC2530芯片的基本特性和CC2530無線模塊的設(shè)計

    本文介紹了CC2530芯片的基本特性,論述了以CC2530芯片為核心的無線通信模塊的硬件設(shè)計和調(diào)試軟件設(shè)計,在介紹設(shè)計規(guī)范和模塊結(jié)構(gòu)的基礎(chǔ)上,采用TI公司的
    發(fā)表于 02-11 08:00 ?97次下載
    <b class='flag-5'>CC2530</b>芯片的基本特性和<b class='flag-5'>CC2530</b>無線模塊的設(shè)計

    如何使用ESP8266和Android控制繼電器

    ESP8266 WiFi模塊系列的下一個項目是通過在MIT App Inventor的幫助下開發(fā)的App(應(yīng)用程序)使用ESP8266和Android控制繼電器。通過在Android
    的頭像 發(fā)表于 07-30 10:40 ?2.7w次閱讀
    如何使用<b class='flag-5'>ESP8266</b>和Android控制繼電器

    APP同過ESP8266與51單片機通信

    APP通過ESP8266與單片機通信簡述本項目中是用ESP8266作為熱點,工作在MODE2模式,手機作為station接入
    發(fā)表于 11-11 18:06 ?79次下載
    <b class='flag-5'>APP</b>同過<b class='flag-5'>ESP8266</b>與51單片機<b class='flag-5'>通信</b>

    STM32F429與CC2530 ZigBee模塊通信

    STM32F429與CC2530 ZigBee模塊通信的方法。目錄ZigBee簡介串口通信簡介簡單的數(shù)據(jù)顯示ZigBee簡介ZigBee譯為"紫蜂",它與藍牙相類似。是一種新興的短距離無線通信
    發(fā)表于 11-29 20:51 ?50次下載
    STM32F429與<b class='flag-5'>CC2530</b> ZigBee模塊<b class='flag-5'>通信</b>

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

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

    基于CC2530的ZigBee通信網(wǎng)的應(yīng)用設(shè)計.pdf

    基于CC2530的ZigBee通信網(wǎng)的應(yīng)用設(shè)計.pdf
    發(fā)表于 12-15 18:17 ?23次下載

    手機ESP8266模塊TCP協(xié)議通信

    手機ESP8266模塊通信本人在搞手機ESP8266通信
    發(fā)表于 12-16 16:47 ?24次下載
    <b class='flag-5'>手機</b>與<b class='flag-5'>ESP8266</b>模塊TCP協(xié)議<b class='flag-5'>通信</b>

    stm32f103c8t6控制ESP8266手機APP通信

    stm32f103c8t6控制ESP8266手機APP通信之前已經(jīng)發(fā)表過利用stm32控制藍牙模塊與手機
    發(fā)表于 12-27 18:53 ?79次下載
    stm32f103c8t6控制<b class='flag-5'>ESP8266</b>與<b class='flag-5'>手機</b><b class='flag-5'>APP</b><b class='flag-5'>通信</b>

    CC2530無線通信模塊使用串口通信參考方法

    CC2530無線通信模塊使用串口通信參考方法
    發(fā)表于 04-24 17:20 ?13次下載

    基于CC2530的ZigBee通信網(wǎng)絡(luò)的應(yīng)用設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于CC2530的ZigBee通信網(wǎng)絡(luò)的應(yīng)用設(shè)計.pdf》資料免費下載
    發(fā)表于 10-26 09:34 ?3次下載
    基于<b class='flag-5'>CC2530</b>的ZigBee<b class='flag-5'>通信</b>網(wǎng)絡(luò)的應(yīng)用設(shè)計

    cc2530繼電器模塊使用

    繼電器模塊的基本原理、類型、應(yīng)用領(lǐng)域以及使用方法。 一、CC2530繼電器模塊的基本原理 CC2530繼電器模塊采用了TI公司的CC2530芯片作為主控,并通過無線
    的頭像 發(fā)表于 12-21 14:47 ?1512次閱讀
    RM新时代网站-首页