0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CC2530采用ESP8266与手机APP通信

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2023-05-23 09:15 次阅读

一、案例介绍

下面是一个基于CC2530和ESP8266的项目示例,它演示了如何使用CC2530与ESP8266通信以及使用AT指令控制其WiFi模块设置和数据传输。

项目概述: 项目实现通过CC2530控制ESP8266将其配置成AP+TCP服务器模式,并通过手机APP连接到TCP服务器并完成数据传输。ESP8266将作为一个热点(AP)来工作,其WiFi模块被配置为建立一个TCP服务器并监听端口号。CC2530将使用其串口与ESP8266进行通信,并通过AT指令控制ESP8266的WiFi模块设置和数据传输。

硬件组件:

  1. CC2530芯片
  2. ESP8266 WiFi模块
  3. USB转TTL串口转接板
  4. Android手机

软件组件:

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

实现步骤:

  1. 硬件连接: 将ESP8266模块与USB转TTL串口转接板相连,然后将串口转接板连接到PC上的USB接口。 在开发板上焊接CC2530,然后将其连接到ESP8266模块的TXD和RXD引脚上(即CC2530的P0.2与P0.3引脚,分别连接到ESP8266的RXD和TXD引脚)。
  2. 配置ESP8266模块: 使用串口工具连接到ESP8266模块,然后根据AT指令集将其配置为AP+TCP服务器模式。例如,可以使用以下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服务器监听的端口号。

编写CC2530程序: 在IAR Embedded Workbench for 8051中创建一个新的工程,在其中添加串口驱动程序以及ESP8266通信所需的AT指令函数。然后,编写主程序代码来实现以下功能:

  • 初始化串口
  • 向ESP8266发送AT指令以配置其WiFi模块
  • 等待ESP8266向CC2530发送TCP连接请求
  • 接受从ESP8266传回的数据并将其显示在串口工具中

以下是示例代码的一部分,用于初始化串口并向ESP8266发送AT指令:

#include "uart.h"
#include 
​
// AT指令函数
void at_command(char* cmd)
{
  uart_puts(cmd);
  uart_puts("rn");
  delay_ms(1000);
}
​
int main()
{
  // 初始化串口
  uart_init();
  
  // 发送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传回的数据并将其显示在串口工具中
    if (uart_available())
     {
      char c = uart_read();
      uart_putc(c);
     }
   }
​
  return 0;
}

二、CC2530与ESP8266科普

CC2530是德州仪器(Texas Instruments,简称TI公司推出的一款基于ZigBee协议的SoC单芯片解决方案,它集成了一个8051内核、硬件AES加密加速器、具备丰富外设的低功耗射频芯片和物理层。CC2530支持IEEE 802.15.4标准和ZigBee协议,并且具有低功耗、高可靠性和长距离等特点,广泛应用于物联网智能家居智能医疗、无线传感网和工业自动化等领域。

ESP8266是一款由中国企业乐鑫(Espressif Systems)研发的超低功耗Wi-Fi芯片,被广泛应用于物联网相关设备的开发中。该芯片采用Tensilica L106 32位处理器,内置TCP/IP协议,可以实现Wi-Fi通信,同时也支持传统的UART协议、SPI协议等串行通信方式。ESP8266芯片集成了射频电路、天线、Flash存储器和电源管理等,体积小巧、功耗低,具有高度集成性和低成本的特点。

ESP8266芯片的主要特点如下:

1. 支持802.11 b/g/n Wi-Fi协议,通信距离远,数据传输速度快;
2. 内置32位低功耗Tensilica L106 CPU,主频可达80MHz;
3. 支持UART、SPI、I2C等多种串行通信协议;
4. 集成了高速缓存和SRAM,具有强大的处理性能和存储能力;
5. 支持蓝牙4.2、BLE等无线通信协议(部分型号支持);
6. 能够与各种MCU传感器等外设进行协同工作,大大降低了开发成本和门槛。

ESP8266芯片具有成本低、功耗低、尺寸小和易于开发等优点,在物联网、智能家居、智能手环、智能家电等领域广泛应用。同时,ESP8266芯片也被视为低功耗Wi-Fi IoT领域中的杀手锏,为物联网设备的互联提供了更为简便、稳定、高效的解决方案。

三、功能代码实现介绍

在CC2530上实现控制ESP8266配置成AP+TCP服务器模式,与手机APP之间完成数据传输,需要使用CC2530的串口与ESP8266通信,以及使用ESP8266 AT指令控制ESP8266的WiFi模块设置和数据的发送,代码如下:

#include 
#include 
#include 
​
#define ESP_ON  P1_0 // ESP8266电源控制引脚
#define ESP_RST P1_1 // ESP8266复位引脚
#define UART_TX P0_2 // CC2530串口发送引脚
#define UART_RX P0_3 // CC2530串口接收引脚
​
// ESP8266 AT指令常用指令
const char* AT_RST = "AT+RST";
const char* AT_CWMODE = "AT+CWMODE=3"; // 设置ESP8266为AP+STA模式
const char* AT_CWSAP = "AT+CWSAP="ssid","pass",1,3"; // 设置ESP8266 AP模式下的WiFi名称和密码
const char* AT_CIPMUX = "AT+CIPMUX=1"; // 设置ESP8266多路连接模式
const char* AT_CIPSERVER = "AT+CIPSERVER=1,8888"; // 设置ESP8266 TCP服务器端口
const char* AT_CIPSEND = "AT+CIPSEND=0,50"; // 设定ESP8266发送数据的长度,50字节
​
// ESP8266 AT指令回应标志
const char* RESPONSE_OK = "OK"; // AT指令执行成功
const char* RESPONSE_ERROR = "ERROR"; // AT指令执行失败
const char* RESPONSE_READY = "ready"; // ESP8266已经准备就绪
const char* RESPONSE_CONNECT = "CONNECT"; // ESP8266连接成功
const char* RESPONSE_CLOSED = "CLOSED"; // ESP8266连接关闭
​
// ESP8266的WIFI名称和密码
const char* SSID = "esp8266";
const char* PASSWORD = "wifipassword";
​
// 存储ESP8266返回的数据
char response[100];
​
// 延时函数
void delay(int ms) {
  while (--ms > 0) __delay_cycles(48000);
}
​
// 向ESP8266发送AT指令,并获取ESP8266的回应
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; // 复位ESP8266
     delay(500);
     P1OUT |= ESP_RST;
     delay(1000);
 ​
     // 配置串口
     P0SEL |= BIT2 + BIT3;
     UCA0CTL1 = UCSSEL_2;
     UCA0BR0 = 130;
     UCA0BR1 = 6;
     UCA0MCTL = UCBRS_4;
 ​
     // 逐步执行AT指令,确保每一步配置都执行成功
     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准备就绪
  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");
      // 发送数据
      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); // 延时确保数据发送完成
      // 关闭连接
      sendATCommand("AT+CIPCLOSE=0", 1);
      printf("Client disconnected.n");
     }
    delay(10);
   }
}

这是CC2530的代码,其中ESP8266的控制使用了AT指令。也就是说,ESP8266作为网络模块,只是负责在指定的端口上监听客户端的连接和传输数据,真正控制数据传输的是CC2530,CC2530还要负责ESP8266的WiFi模块设置和TCP服务器的建立。这里只是给出了用CC2530控制ESP8266的代码,手机APP的代码需要自行开发。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    5706

    浏览量

    134405
  • 物联网
    +关注

    关注

    2870

    文章

    41639

    浏览量

    358406
  • WIFI
    +关注

    关注

    81

    文章

    5162

    浏览量

    199444
  • 串口
    +关注

    关注

    14

    文章

    1483

    浏览量

    74514
  • ESP8266
    +关注

    关注

    50

    文章

    947

    浏览量

    43965
收藏 人收藏

    评论

    相关推荐

    基于CC2530(ZigBee设计)的温度报警器

    这是基于CC2530设计的远程温度报警器,通过CC2530终端检测环境温度上传给手机APP实时显示。
    的头像 发表于 05-27 09:54 7927次阅读
    基于<b class='flag-5'>CC2530</b>(ZigBee设计)的温度报警器

    Cc2530

    CC2530
    三分温柔
    发布于 :2022年05月31日 21:12:52

    ESP8266手机之间的通信

    最近在鼓捣esp8266,我想让esp8266模块连接WiFi,然后手机用4g网络,实现esp8266模块与手机之间的
    发表于 12-01 21:24

    手机APP怎么通过esp8266wifi模块和红外模块通信

    我要做一个基于51单片,用esp8266 wifi模块和一个红外模块,实现手机APP控制家电(空调、电视),这个什么wifi模块还要学习家用电器的红外控制信号。我就想知道APP是怎么通
    发表于 04-10 14:34

    如何让esp8266 wifi模组和APP通信

    esp8266 wifi模组用手机一键配网成功(station模式)后,wifi模组和手机所连wifi在一个局域网内,手机上有一个wifi APP
    发表于 06-27 00:32

    手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关

    一、系统方案手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,
    发表于 12-02 06:30

    手机APP是如何发数据到ESP8266模块上的

    ESP8266模块如果连接的路由器,路由器给ESP8266分配的IP不是公网IP,那手机APP是如何发数据到ESP8266
    发表于 01-14 07:17

    手机ESP8266模块通信的过程分享

    手机ESP8266模块通信本人在搞手机ESP8266通信
    发表于 02-15 06:38

    CC2530芯片的基本特性和CC2530无线模块的设计

    本文介绍了CC2530芯片的基本特性,论述了以CC2530芯片为核心的无线通信模块的硬件设计和调试软件设计,在介绍设计规范和模块结构的基础上,采用TI公司的
    发表于 02-11 08:00 96次下载
    <b class='flag-5'>CC2530</b>芯片的基本特性和<b class='flag-5'>CC2530</b>无线模块的设计

    APP同过ESP8266与51单片机通信

    APP通过ESP8266与单片机通信简述本项目中是用ESP8266作为热点,工作在MODE2模式,手机作为station接入
    发表于 11-11 18:06 79次下载
    <b class='flag-5'>APP</b>同过<b class='flag-5'>ESP8266</b>与51单片机<b class='flag-5'>通信</b>

    ESP8266通信详细教程

    ESP8266通信详细教程
    发表于 12-09 17:21 46次下载
    <b class='flag-5'>ESP8266</b><b class='flag-5'>通信</b>详细教程

    基于CC2530的ZigBee通信网的应用设计.pdf

    基于CC2530的ZigBee通信网的应用设计.pdf
    发表于 12-15 18:17 21次下载

    手机ESP8266模块TCP协议通信

    手机ESP8266模块通信本人在搞手机ESP8266通信
    发表于 12-16 16:47 24次下载
    <b class='flag-5'>手机</b>与<b class='flag-5'>ESP8266</b>模块TCP协议<b class='flag-5'>通信</b>

    stm32f103c8t6控制ESP8266手机APP通信

    stm32f103c8t6控制ESP8266手机APP通信之前已经发表过利用stm32控制蓝牙模块与手机
    发表于 12-27 18:53 77次下载
    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无线通信模块使用串口通信参考方法
    发表于 04-24 17:20 13次下载