最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术。

下面就是本人通过查阅大佬资料做的一个整合版本的通过手机APP来控制LED开关的实验:

第一步:连线使用软串口方式,利用arduino来对ESP8266进行AT命令操作。

连线参考图如下:

连线完后,利用串口调试工具和Arduino IDE 软件进行编程,实现对ESP8266的软串口指令下达:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("Goodnight moon!");

// set the data rate for the SoftwareSerial port
mySerial.begin(115200);
mySerial.println("Hello, world?");
}

void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}

==程序效果==

打开串口,设置波特率为115200,串口显示:

Goodnight moon!
Hello, world?

ERROR

表示已经进入AT模式,如果只有Goodnight moon!,说明没有进入AT模式。

发送AT,反馈OK。

第二步:利用AT命令来对ESP8266进行设置,使其连接到和手机在同一wifi网络中。

1:发送AT+RST(执行指令)

指令:AT+RST

反馈:OK

说明:刚上电可以不发送该指令,有些厂家生产的ESP8266模块,无法即时重启复位,导致串口无响应,如已发送,则重新开关串口按钮即可。

2:发送AT+CWMODE=3或AT+CWMODE=2(设置指令)

指令:AT+CWMODE=<MODE>

说明:<MODE>:1为Station模式,2为AP模式,3为Station兼AP模式

反馈:OK

3:发送AT+CWJAP=“long”,”12345678”(选择你所要加入的路由器名称和密码进入)

指令:AT+CWJAP=<ssid>,<pwd>

<ssid>:字符串参数,ESP8266WIFI名字

<pwd>:字符串参数,WIFI密码,最长64字节,ASCII

具体内容如下:

//设置WiFi应用模式为Station
AT+CWMODE=3
//连接到WiFi路由器,请将SSID替换为路由器名称,Password替换为路由器WiFi密码
AT+CWJAP="SSID","Password"
//连接单连模式
AT+CIPMUX=0
//设置为透传模式
AT+CIPMODE=1
//进入透传模式,并保存(进入后模块就一直为透传模式,需要退出则取消发送新行,发送+++)
,IP地址为远端设备地址,例:我用手机控制,那么我的手机在路由器WIFI上的IP地址为192.168.1.110
AT+SAVETRANSLINK=1,"192.168.1.110",8080,"TCP"

2018.04.24补充:此时若无USB转TTL工具,不要使用AT+SAVETRANSLINK指令,该指令会将当前设置存储到RAM中去,ESP8266通电后自动进入连接模式,除非使用USB转TTL进行烧写,否则将无法恢复到调试模式(无法使用AT指令)。本人掉坑,后USB转TTL烧写版本后,才恢复正常。

第三步,将LED的正极引脚插入9号数字口,负极接地,进行编程。

int led_pin = 9;
//定义一个10字节的整型数据变量cmd作为命令,这里可以修改为不同的数字。此处设置为10是为了有更好的兼容性。
char cmd[10];
//判断收到的cmd是否有内容
bool valid_cmd = false; void setup()
{
//定义连接led的引脚为输出信号
pinMode(led_pin, OUTPUT);
Serial.begin(115200);
}
void loop()
{
/*以下部分是串口信息处理过程*/
//定义一个整数型变量i
int i;
//如果串口收到有数据
if (Serial.available() > 0)
{
//变量i最大为10
for (i = 0; i < 10; i++)
{
//清空缓存,存入cmd变量,并以\0作为结束符
cmd[i] = '\0';
}
//此时i只能取前9位,第10位是结束符\0
for (i = 0; i < 9; i++)
{
//再次判断串口如果收到有数据,防止数据丢失
if (Serial.available() > 0)
{
//给变量cmd赋值,取串口收到的前9位字符
cmd[i] = Serial.read();
delay(1);
}
else
{
//如果串口数据超过9位,后面的字符直接忽略,跳到下一步
break;
}
}
/*以上串口信息处理结束*/ //得到最终变量cmd的有效值
valid_cmd = true;
} //判断变量cmd的值,开始处理
if (valid_cmd)
{
//如果变量cmd的前2位的值是on
if (0 == strncmp(cmd, "on", 2))
{
//则连接led的引脚电压被置高5V,
digitalWrite(led_pin, HIGH);
//串口打印返回值ON,表示ON的操作执行成功
Serial.println("ON");
}
else if (0 == strncmp(cmd, "off", 3)) //否则如果变量cmd的前3位的值是off
{
//则连接继电器的引脚电压被置低0V,灯的电路被断开,灯灭
digitalWrite(led_pin, LOW);
//串口打印返回值F,表示OFF的操作执行成功
Serial.println("OFF");
}
else //如果以上两个条件都不成立,前2位不是ON,或者前3位不是OFF,即不正确的命令
{
//仅串口打印返回值X,表示指令错误。
Serial.println("X");
}
//到此,变量cmd的指令被处理完毕
valid_cmd = false;
}
//延迟10毫秒,返回loop主程序继续读取新的串口指令
delay(10); }

第四步,安装APP进行验证。

1、打开网络调试助手,点击TCP SERVER—-配置

2、当开启服务端后,ESP8266自动连接上了:

3、在发送框内发送”on”即可点亮Arduino板载LED灯。

4、在发送框内发送”off”即可熄灭Arduino板载LED灯。

总结:通过对网上资料的整理学习,实现了一种不通过USB转TTL烧写ESP8266的方式,对APP实现同一WiFi网络内LED开关。

本文主要参考了如下资料:

手机通过ESP8266控制Arduino上的LED灯(AT指令方式)

手机通过ESP8266控制Arduino上的LED灯(烧写方式)

基于arduino UNO R3+ESP8266控制LED灯的开关(无USB转TTL工具实现)的更多相关文章

  1. Arduino控制LED灯(开关控制)

    问题:当使用"digitalRead(BUT) == 1"控制LED灯时会出现"digitalWrite(LED, ledState);"的值出现跳动. 原因: ...

  2. Arduino系列之pwm控制LED灯(呼吸灯)

    下面我将写出最简单控制呼吸灯的方法 void setup()                                 // { pinMode(12,OUTPUT);             ...

  3. C#与Arduino通过串口通信来控制LED灯的状态

    一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...

  4. 基于Proteus仿真的Arduino学习(1)——Arduino Uno最小系统及LED的简单使用

    一.前言:  A.Arduino简介 Arduino是由一个欧洲开发团队于2005年冬季开发.其成员包括Massimo Banzi.David Cuartielles.Tom Igoe.Gianluc ...

  5. arduino入门学习实现语音控制LED灯

    需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...

  6. arduino 红外遥控器控制LED灯

    /* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...

  7. Arduino uno r3 使用 ESP8266 UART-WiFi 透传模块

    一.所需硬件材料 1.ESP8266:01s某宝上3.5块钱 2.杜邦线:某宝几块钱一组40P,这里只需要三根,用于连接 树莓派与继电器 3.烧录器 二.ESP8266 AT固件烧录 ESP8266主 ...

  8. enc28J60 网页控制LED灯

    软件IDE:Arduino 1.6.3 1.库的安装: 从https://github.com/jcw/ethercard 下载源码包,解压,复制ethercard-master文件夹到Arduino ...

  9. 嵌入式Linux学习入门:控制LED灯

    记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...

随机推荐

  1. JavaScript 中的 Var,Let 和 Const 有什么区别

    一.var 在ES5中,顶层对象的属性和全局变量是等价的,用var声明的变量既是全局变量,也是顶层变量 注意:顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象 var ...

  2. Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇)

    Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 目录 Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 1 Internal Locking Methods Row-Leve ...

  3. Kafka 总结学习

    Kafka Need No Keeper 最近在鹅厂工作中不断接触到Kafka,虽然以前也使用过,但是对其架构和发展过程总是模模糊糊,所以在回学校准备末考的时候找些资料总结一下. Kafka Need ...

  4. zookeeper集群及kafka集群搭建

    1.zookeeper集群搭建 1.1 上传安装包 官网推荐至少3个节点,我们这里也用三个节点192.169.2.18  192.169.1.82  192.169.1.95 准备好安装包,zooke ...

  5. nginx负载均衡与反向代理

    1.集群的特点 (1)高性能 (2)价格有效性 (3)可伸缩性 (4)高可用性 (5)透明性 2.负载均衡概述 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡.分 ...

  6. 5、修改oracle的字符集

    注意:修改字符集前需要将表空间进行数据泵备份: 5.1.修改server端字符集: 1.登录到oracle实例查看字符集: [oracle@slave-node2 ~]$ echo $ORACLE_S ...

  7. 13、解决java -version命令报错

    13.1.问题描述: 安装jdk后在dos界面中输入"java -version"回车的时候报如下错误: Error opening registry key'software\J ...

  8. 记一次ios下h5页面图片显示问题

    刚入职公司时做了一个移动端图片预览的组件,之前也有业务组用过,没发现什么问题,但是这次有两个很诡异的问题. 一个是老数据的图不显示,另一个是图片点击预览只显示一部分加载不全.之所以诡异是所有设备都没问 ...

  9. hive学习笔记之十:用户自定义聚合函数(UDAF)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<hive学习笔记>的第十 ...

  10. AcWing 99. 激光炸弹

    地图上有n个目标,用整数x,y表示目标在地图上的位置,每个目标都有一个价值Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含r个位置的正方形内的所有目标. 激光炸弹的投 ...