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

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

3天内不再提示

使用ESP8266和LPC2148远程控制设备的方式

科技观察员 来源:circuitdigest 作者:Pramoth Thangavel 2022-09-20 16:21 次阅读

ESP8266 Wi-Fi 收发器提供了一种将微控制器连接到网络的方法。它被广泛用于物联网项目,因为它便宜、小巧且易于使用。

在本教程中,我们将ESP8266 Wi-Fi 模块与 ARM7-LPC2148 微控制器连接,并创建一个网络服务器来控制连接到 LPC2148 的 LED。工作流程将如下所示:

从 LPC2148 向 ESP8266 发送 AT 命令以将 ESP8266 配置为 AP 模式

将笔记本电脑或计算机 Wi-Fi 连接到 ESP8266 接入点

使用 ESP8266 网络服务器的接入点 IP 地址在 PC 中创建 HTML 网页

根据从 ESP8266 接收到的值,为 LPC2148 创建一个程序来控制 LED

pYYBAGMpd8CAa4uwAABPvtWwPfI791.png

所需组件

硬件

ARM7-LPC2148

ESP8266 Wi-Fi 模块

FTDI(USBUART TTL)

引领

3.3V稳压IC

面包板

软件:

KEIL uVision

闪光魔法工具

油灰

ESP8266 Wi-Fi 模块

poYBAGMpd7yAGLGFAAYGgBvGrIY874.png

ESP8266 是一款低成本、广泛用于嵌入式项目的 Wi-Fi 模块,需要 3.3V 的低功耗。它仅使用两条线 TX 和 RX 在 ESP8266 和任何具有 UART 端口的微控制器之间进行串行通信和数据传输。

ESP8266 Wi-Fi 模块引脚图

pYYBAGMpd7eAWoVEAAErIXwED_o149.png

设置 ESP8266 电路板

ESP8266 需要恒定的 3.3V 电源,它对面包板不友好。所以在我们之前关于 ESP8266 的教程中,我们为 ESP8266 制作了一个电路板,带有 3.3V 稳压器、一个 RESET 按钮和用于切换模式(AT 命令或闪光模式)的跳线设置。它也可以在不使用 perf board 的情况下在面包板上设置。

在这里,我们焊接了面包板上的所有组件以制作我们自己的 ESP8266 Wi-Fi 板

pYYBAGMpd7SAFU32AATOd2uiNIc707.png

连接LPC2148和ESP8266进行串行通信

为了将ESP8266 与 LPC2148 连接,我们必须在这两个设备之间建立 UART 串​​行通信,以将 AT 命令从 LPC2148 发送到 ESP8266 以配置 ESP8266 Wi-Fi 模块。

因此,为了在 LPC2148 中使用 UART 通信,我们需要在 LPC2148 中初始化 UART 端口。LPC2148 有两个内置的 UART 端口(UART0 和 UART1)。

LPC2148中的 UART 引脚

pYYBAGMpd66AGCdPAAQgP7LJcAA014.pngpoYBAGMpd6uAZYZCAAAIRHYDut8845.png

在 LPC2148 中初始化 UART0

我们知道 LPC2148 的引脚是通用引脚,所以我们需要使用 PINSEL0 寄存器来使用 UART0。在初始化 UART0 之前,让我们了解 LPC2148 中用于使用 UART 功能的这些 UART 寄存器。

LPC2148 中的 UART 寄存器

下表显示了编程中使用的一些重要寄存器。在我们未来的教程中,我们将简要介绍 LPC2148 中用于 UART 的其他寄存器。

UART0 的 x-0 和 UART1 的 x-1:

pYYBAGMpd6aANR09AAAy6xM35n0980.png

电路图和连接

pYYBAGMpd6KAdwtvAAHM0knWmcA285.png

LPC2148、ESP8266和FTDI之间的连接如下图所示

pYYBAGMpd5yAci6SAAALaTL3sEY747.png

ESP8266 通过 3.3V 稳压器供电,FTDI 和 LPC2148 通过 USB 供电。

为什么FTDI在这里?

在本教程中,我们将 FTDI(USB 转 UART TTL)的 RX 引脚连接到 ESP8266 TX 引脚,该引脚进一步连接到 LPC2148 RX 引脚,以便我们可以使用任何终端软件(如 putty、Arduino IDE)看到 ESP8266 模块的响应。 但为此,请根据 ESP8266 Wi-Fi 模块的波特率设置波特率。(我的波特率是 9600)。

poYBAGMpd5iAX1FwAAeLmqzokKI141.png

在 LPC2148 中对 UART0 进行编程以连接 ESP8266 的步骤

以下是将 ESP8266 与 LPC2148 连接的编程步骤,这将使其与物联网兼容。

第 1 步:-首先我们需要初始化 PINSEL0 寄存器中的 UART0 TX 和 RX 引脚。

(P0.0 作为 TX,P0.1 作为 RX)

PINSEL0 = PINSEL0 | 0x00000005;

第 2 步:-接下来在 U0LCR(行控制寄存器)中,将 DLAB(除数锁存器访问位)设置为 1,因为它启用它们,然后将停止位设置为 1,数据帧长度设置为 8 位。

U0LCR = 0x83;

第 3 步:-现在要注意的重要步骤是根据 PCLK 值和所需的波特率设置 U0DLL 和 U0DLM 的值。通常对于 ESP8266,我们使用 9600 的波特率。所以让我们看看如何为 UART0 设置 9600 的波特率。

波特率计算公式:

pYYBAGMpd5OAFRSSAABb8G8c5I4581.png

在哪里,

PLCK:外设时钟频率 (MHz)

U0DLM、U0DLL:波特率发生器分频器寄存器

MULVAL、DIVADDVAL:这些寄存器是小数发生器值

对于 PCLK=15MHZ 的波特率 9600

poYBAGMpd4-AF4pZAABfABqiMc4867.png

MULVAL =1 & DIVADDVAL=0

256*U0DLM+U0DLL=97.65

所以 U0DLM=0,我们得到 U0DLL=97(不允许分数)

所以我们使用以下代码:

U0DLM = 0x00;

U0DLL = 0x61;(十六进制值 97)

第 4 步:-最后,我们必须在 LCR 中将 DLA(除数锁存访问)禁用设置为 0。

所以我们有

U0LCR &= 0x0F;

第 5 步:- 对于 Transmitting a Character,将要发送的字节加载到 U0THR 中,并等待字节发送完毕,这由 THRE 变为 HIGH 表示。

无效 UART0_TxChar(char ch)

{

U0THR = ch;

而((U0LSR & 0x40)== 0);

}

第 6 步:- 对于传输字符串,使用以下函数。为了一一发送字符串数据,我们使用了上述步骤中的字符函数。

无效 UART0_SendString(char* str)

{

uint8_t i = 0;

而( str[i] != ‘\0’ )

{

UART0_TxChar(str[i]);

我++;

}

}

第 7 步:- 对于接收字符串,此处使用中断服务程序函数,因为每当我们发送 AT 命令或每当 ESP8266 向 LPC2148 发送数据时,ESP8266 Wi-Fi 模块都会将数据发送回 LPC2148 的 RX 引脚,就像我们发送数据到 ESP8266 的网络服务器。

示例:当我们从 LPC2148(“AT\r\n”)向 ESP8266 发送 AT 命令时,我们会从 Wi-Fi 模块收到“OK”回复。

所以我们在这里使用中断来检查从 ESP8266 Wi-Fi 模块接收到的值,因为 ISR 中断服务程序具有最高优先级。

因此,每当 ESP8266 向 LPC2148 的 RX 引脚发送数据时,都会设置中断并执行 ISR 功能。

第 8 步:-要为 UART0 启用中断,请使用以下代码

VICintEnable是向量中断使能寄存器,用于使能 UART0 的中断。

VICIntEnable |= (1《《6);

VICVecCnt10是为 UART0 分配插槽的向量中断控制寄存器。

VICVectCntl0 = (1《《5) | 6;

接下来,VICVectaddr0是向量中断地址寄存器,它具有中断服务程序 ISR 地址。

VICVectAddr0 =(无符号)UART0_ISR;

然后我们必须为 RBR 接收缓冲寄存器分配中断。所以在中断使能寄存器(U0IER)中我们为 RBR 设置。这样当我们接收到数据时,就会调用中断服务程序(ISR)。

U0IER=IER_RBR;

最后,当我们从 ESP8266 Wi-Fi 模块接收数据时,我们需要执行某些任务的 ISR 功能。在这里,我们只是从 U0RBR 中的 ESP8266 读取接收到的值,并将这些值存储在 UART0_BUFFER 中。最后,在 ISR 结束时,应该将VICVectAddr设置为零或虚拟值。

void UART0_ISR() __irq

{

unsigned char IIRValue;

IIR 值 = U0IIR; IIR 值 》》=1; IIR值&=0x02; if(IIRValue == IIR_RDA) { UART_BUFFER[uart0_count]=U0RBR; uart0_count++; 如果(uart0_count == BUFFER_SIZE) { uart0_count=0; } } VICVectAddr = 0x0; }

第 9 步:-由于 ESP8266 Wi-Fi 模块应设置为 AP 模式,我们需要使用UART0_SendString()函数从 LPC2148 发送相应的 AT 命令。

从 LPC2148 发送到 ESP8266的AT 命令如下所述。发送每个 AT 命令后,ESP8266 响应“OK”

1. 发送 AT 到 ESP8266

UART0_SendString(“AT\r\n”);

延迟_毫秒(3000);

2. 发送 AT+CWMODE=2(设置 ESP8266 为 AP 模式)。

UART0_SendString(“AT+CWMODE=2\r\n”);

延迟_毫秒(3000);

3.发送AT+CIFSR(获取AP的IP)

UART0_SendString(“AT+CIFSR\r\n”);

延迟_毫秒(3000);

4. 发送 AT+CIPMUX=1(用于多连接)

UART0_SendString(“AT+CIPMUX=1\r\n”);

延迟_毫秒(3000);

5. 发送 AT+CIPSERVER=1,80(用于启用 ESP8266 SERVER with OPEN PORT)

UART0_SendString(“AT+CIPSERVER=1,80\r\n”);

延迟_毫秒(3000);

将十六进制文件编程和闪存到 LPC2148

要对 ARM7-LPC2148 进行编程,我们需要 keil uVision 和 Flash Magic 工具。此处使用 USB 电缆通过微型 USB 端口对 ARM7 Stick 进行编程。我们使用 Keil 编写代码并创建一个 hex 文件,然后使用 Flash Magic 将 HEX 文件闪存到 ARM7 棒。要了解有关安装 keil uVision 和 Flash Magic 以及如何使用它们的更多信息,请点击链接 Getting Started With ARM7 LPC2148 Microcontroller and Program it using Keil uVision。

完整的程序在教程的最后给出。

注意:将 HEX 文件上传到 LPC2148 时,不得为 ESP8266 Wi-Fi 模块和与 LPC2148 连接的 FTDI 模块供电。

使用带有 LPC2148 的 ESP8266 IoT Webserver 控制 LED

步骤 1:-将 HEX 文件上传到 LPC2148 后,通过 USB 线将 FTDI 模块连接到 PC,然后打开 putty 终端软件。

pYYBAGMpd4OAHkstAABzsz4_K2o012.png

选择Serial,然后根据您的PC或LAPTOP我的选择COM端口(COM3)。波特率为 9600。

步骤 2:-现在重置 ESP8266 Wi-Fi 模块或关闭电源并重新上电,putty 终端将显示 ESP8266 Wi-Fi 模块的响应,如下图所示。\

poYBAGMpd32AUdg9AAAP_Ws2Zhc758.png

第 3 步:-现在按下 LPC2148 上的 RESET 按钮。之后 LPC2148 开始向 ESP8266 发送 AT 命令。我们可以在 putty 终端中看到它的响应。

pYYBAGMpd3mANTJaAAAsJBr7_gE086.png

第 4 步:-如上图所示,ESP8266 设置为 MODE 2,即 AP 模式,APIP 的地址为 192.168.4.1。请注意此地址,因为此地址将被硬编码在网页 HTML 代码中,以控制连接到 LPC2148 的 LED。

重要提示:当 ESP8266 处于 AP 模式时,您必须将 PC 连接到 ESP8266 AP。见下图,我的 ESP8266 模块显示 AP 名称为 ESP_06217B(它已打开且没有密码)。

pYYBAGMpd3WAIoHPAABmr1ZPjvk154.png

最后将记事本文档保存为 .html扩展名

pYYBAGMpd2yABvCLAAE3z8KRfQs263.png

该网页将在网络浏览器中显示如下。

poYBAGMpd2iAIp6nAABQia15U9Q141.png

这里的地址是 AP IP 地址 192.168.4.1,我们使用 LPC2148 中的以下逻辑发送值 @ 和 % 来打开和关闭 LED。

while(1)

{

if(uart0_count !=0)

{

COMMAND[0]=UART0_BUFFER[uart0_count-1];

if(COMMAND[0] == LEDON) //根据从 ESP8266 接收到的值设置 LED 亮或灭的逻辑

{

IOSET1=(1《《20); //设置输出

高 delay_ms(100);

}

else if(COMMAND[0]==LEDOFF)

{

IOCLR1=(1《《20); //设置输出低

delay_ms(100);

}

}

}

这就是使用 ESP8266 和 ARM7 微控制器 LPC2148 远程控制设备的方式。

#include

#include



#define IER_RBR 0X01

#define IIR_RDA 0X02

#define BUFFER_SIZE 0X40



无符号字符 UART0_BUFFER[BUFFER_SIZE];

无符号整数 uart0_count;

无符号字符命令[1];



无符号字符 LEDON='@',LEDOFF='%';



void UART0_ISR() __irq //ISR中断服务程序函数

{

无符号字符 IIR 值;



IIR 值 = U0IIR;



IIR 值 >>=1;

IIR值&=0x02;

如果(IIRValue == IIR_RDA)

{

UART0_BUFFER[uart0_count]=U0RBR;

uart0_count++;

如果(uart0_count == BUFFER_SIZE)

{

uart0_count=0;

}



}

VICVectAddr = 0x0;

}



void delay_ms(uint16_t j) // 以毫秒为单位的延迟函数

{

uint16_t x,i;

for(i=0;i
{

对于(x=0;x<6000;x++);// 循环生成 1 毫秒延迟,Cclk = 60MHz

}

}



无效 UART0_initilize(无效)

{

VPBDIV = 0x00;

PINSEL0 = PINSEL0 | 0x00000005; // 使能 UART0 的 UART0 Rx0 和 Tx0 引脚

U0LCR = 0x83;// DLAB = 1,1 个停止位,8 位字符长度

U0DLM = 0x00;// 对于 9600 的波特率,Pclk = 15MHz

U0DLL = 0x61;// 我们从公式中得到这些 U0DLL 和 U0DLM 的值

U0LCR &= 0x0F; // DLAB = 0



VICIntEnable |= (1<<6); //开启UART0中断

VICVectCntl0 = (1<<5) | 6;//启用UART IRQ插槽

VICVectAddr0 =(无符号)UART0_ISR;//UART ISR函数地址

U0IER=IER_RBR;//启用RBR中断

}



void UART0_TxChar(char ch) //在UART0上发送一个字节的函数

{

U0THR = 通道;

而((U0LSR & 0x40)== 0);//等到THRE位变为1表示传输完成

}



void UART0_SendString(char* str) //在UART0上发送字符串的函数

{

uint8_t 我 = 0;

而( str[i] != '\0' )

{

UART0_TxChar(str[i]);

我++;

}

}





无效 wifi_sendATcommands(无效)

{

延迟毫秒(5000);

UART0_SendString("AT\r\n"); //发送AT到ESP8266

延迟_毫秒(3000);

UART0_SendString("AT+CWMODE=2\r\n"); //发送 AT+CWMODE=2(设置 ESP8266 为 AP 模式)

延迟_毫秒(3000);

UART0_SendString("AT+CIFSR\r\n"); //发送AT+CIFSR(获取AP的IP)

延迟_毫秒(3000);

UART0_SendString("AT+CIPMUX=1\r\n"); //发送 AT+CIPMUX=1 (用于多连接)

延迟_毫秒(3000);

UART0_SendString("AT+CIPSERVER=1,80\r\n"); //发送 AT+CIPSERVER=1,80 (用于启用 ESP8266 SERVER with OPEN PORT)

延迟_毫秒(3000);

}



诠释主要(无效)

{



IODIR1=(1<<20); //将引脚P1.20设置为输出引脚

UART0_initilize(); //函数调用初始化UART0

wifi_sendATcommands(); //向ESP8266发送AT指令的函数调用



而(1)

{ if(uart0_count !=0)

{

命令[0]=UART0_BUFFER[uart0_count-1];

if(COMMAND[0] == LEDON) //根据从 ESP8266 接收到的值设置 LED 开或关的逻辑

{

IOSET1=(1<<20); //设置输出高

延迟毫秒(100);

}

否则如果(命令 [0]==LEDOFF)

{

IOCLR1=(1<<20); //设置输出低

延迟毫秒(100);

}

}

}

}
;i++)

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

    关注

    48

    文章

    7551

    浏览量

    151402
  • led
    led
    +关注

    关注

    242

    文章

    23272

    浏览量

    660786
  • wi-fi
    +关注

    关注

    14

    文章

    2138

    浏览量

    124493
  • ESP8266
    +关注

    关注

    50

    文章

    962

    浏览量

    44987
收藏 人收藏

    评论

    相关推荐

    远程控制通讯--基于Arduino + ESP8266控制LED灯

    Arduino是许多智能硬件爱好者的首选,使用简单快捷,而ESP8266模块也是当前最为热门的WIFI模块。本项目完成了Arduino使用EDP协议通过ESP8266 WIFI模块接入OneNET服务器,并通过在接入设备中创建的
    的头像 发表于 02-27 09:10 4w次阅读
    <b class='flag-5'>远程控制</b>通讯--基于Arduino + <b class='flag-5'>ESP8266</b><b class='flag-5'>控制</b>LED灯

    ESP8266 通过 MQTT 协议实现 LED 的远程控制

    本文简要介绍了搭建 EMQX 服务器实现基于 MQTT 协议远程控制 NodeMCU ESP8266 板载 LED 的解决方案。
    的头像 发表于 09-25 09:11 2004次阅读
    <b class='flag-5'>ESP8266</b> 通过 MQTT 协议实现 LED 的<b class='flag-5'>远程控制</b>

    【PDF】ICDEV的lpc2148资料

    本帖最后由 eehome 于 2013-1-5 10:09 编辑 【PDF】ICDEV的lpc2148资料
    发表于 03-11 09:35

    ESP8266模块想实现手机远程控制

    arduino开发板,ESP8266WiFi模块想实现手机远程控制,哪位大神有这方面的经验资料,帮忙发一份吧,拜求
    发表于 05-08 17:50

    LPC2148单片USB控制器电子资料

    概述:LPC2148是飞利浦半导体公司生产的一款控制器,它为64脚封装。
    发表于 04-21 06:58

    ESP8266远程控制开关的方法分享

    ESP8266远程控制开关示例超全面详细1 背景描述ESP8266模块是比较标准方便的wifi开发模块,把他当做为单片机,有输入输出引脚和操作指令、内存,就是一个计算机了。引脚收发接口可做串口通讯
    发表于 02-28 14:34

    基于LPC2148和MCP2510的高速USB-CAN卡

    本文介绍了基于LPC2148和MCP2510的USB-CAN接口卡。LPC2148是基于ARM7TDMI-S核的微控制器,处理器速度高,内置USB2.0全速控制器和SPI接口。MCP2
    发表于 02-25 11:47 35次下载

    基于LPC2148的电机测速系统

      步进电机的调速和测速系统一般都采用ARM作为控制器,外加分立的数字逻辑电路和模拟电路构成。该系统以LPC2148作为控制核心,合理选择电动机的频率控制和闭环反馈
    发表于 12-13 09:56 1426次阅读
    基于<b class='flag-5'>LPC2148</b>的电机测速系统

    LPC2148驱动例程

    LPC2148开发板所有设备驱动例程 有需要的下来看看
    发表于 12-30 15:58 6次下载

    LPC2148原理图

    LPC2148数据手册,有需要的下来看看
    发表于 02-22 16:55 21次下载

    ESP8266制作能通过手机远程控制的智能插座

    ESP8266制作智能插座!手机远程控制,让家电疯狂起来~
    的头像 发表于 06-04 06:26 6795次阅读

    ESP8266连接手机

    esp8266的三种模式1为Station 模式:ESP8266 模块通过路由器连接互联网,手机或电脑通过互联网实现对设备远程控制。2为AP 模式:
    发表于 11-30 16:06 37次下载
    <b class='flag-5'>ESP8266</b>连接手机

    远程控制)App inventor 编写安卓app控制 ESP8266

    App inventor 编写安卓app控制 ESP8266第一 下载ESP8266示例(arduino ide 编程开发)第二 修改demo例程第三 app inventor 开发原理简述:利用
    发表于 12-08 17:06 28次下载
    (<b class='flag-5'>远程控制</b>)App inventor 编写安卓app<b class='flag-5'>控制</b> <b class='flag-5'>ESP8266</b>

    使用ESP8266-01制作WIFI遥控小车(一)

    互联网实现对设备远程控制。AP 模式:ESP8266 模块作为热点,手机或电脑直接与模块连接,实现局域网无线控制。STA+AP 模式:两种模式的共存模式,即可以通过互联网
    发表于 01-12 19:47 46次下载
    使用<b class='flag-5'>ESP8266</b>-01制作WIFI遥控小车(一)

    使用ESP8266(NodeMCU)控制远程电源插座

    电子发烧友网站提供《使用ESP8266(NodeMCU)控制远程电源插座.zip》资料免费下载
    发表于 02-06 10:44 4次下载
    使用<b class='flag-5'>ESP8266</b>(NodeMCU)<b class='flag-5'>控制</b><b class='flag-5'>远程</b>电源插座