YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17320|回复: 11
打印 上一主题 下一主题

ESP8266 core for Arduino应用:ESP8266 AP Web Server之控制LED

[复制链接]

签到天数: 866 天

[LV.10]以坛为家III

跳转到指定楼层
楼主
发表于 2016-8-19 15:09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Example : AP Web ServerESP8266 不仅可以连接网络,也可以建立自己的网络,允许其他设备连接到它,例如手机,电脑等。
该案例,展示了如何把ESP8266 变为一个接入点(AP),并提供WEB页面给客户端。

下面看下程序:
[] 纯文本查看 复制代码
#include <ESP8266WiFi.h>

//////////////////////
// WiFi Definitions //
//////////////////////
const char WiFiAPPSK[] = "12345678";

/////////////////////
// Pin Definitions //
/////////////////////
const int LED_PIN = 5;        // Thing's onboard, green LED
const int ANALOG_PIN = A0;    // The only analog pin on the esp8266
const int DIGITAL_PIN = 12;   // Digital pin to be read

WiFiServer server(80);

void setup() 
{
  initHardware();
  setupWiFi();
  server.begin();
}

void loop() 
{
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val = -1; // We'll use 'val' to keep track of both the
                // request type (read/set) and value if set.
  if (req.indexOf("/led/0") != -1)
    val = 0; // Will write LED low
  else if (req.indexOf("/led/1") != -1)
    val = 1; // Will write LED high
  else if (req.indexOf("/read") != -1)
    val = -2; // Will print pin reads
  // Otherwise request will be invalid. We'll say as much in HTML

  // Set GPIO5 according to the request
  if (val >= 0)
    digitalWrite(LED_PIN, val);
  
  client.flush();

  // Prepare the response. Start with the common header:
  String s = "HTTP/1.1 200 OK\r\n";
  s += "Content-Type: text/html\r\n\r\n";
  s += "<!DOCTYPE HTML>\r\n<html>\r\n";
  // If we're setting the LED, print out a message saying we did
  if (val >= 0)
  {
    s += "LED is now ";
    s += (val)?"high":"low";
  }
  else if (val == -2)
  { // If we're reading pins, print out those values:
    s += "Analog Pin = ";
    s += String(analogRead(ANALOG_PIN));
    s += "<br>"; // Go to the next line.
    s += "Digital Pin 12 = ";
    s += String(digitalRead(DIGITAL_PIN));
  }
  else
  {
    s += "Invalid Request.<br> Try /led/1, /led/0, or /read.";
  }
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");

  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

void setupWiFi()
{
  WiFi.mode(WIFI_AP);
  
  // Do a little work to get a unique-ish name. Append the
  // last two bytes of the MAC (HEX'd) to "Thing-":
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.softAPmacAddress(mac);
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  macID.toUpperCase();
  String AP_NameString = "ESP8266 Thing " + macID;
  
  char AP_NameChar[AP_NameString.length() + 1];
  memset(AP_NameChar, AP_NameString.length() + 1, 0);
  
  for (int i=0; i<AP_NameString.length(); i++)
    AP_NameChar[i] = AP_NameString.charAt(i);
  
  WiFi.softAP(AP_NameChar, WiFiAPPSK);

  Serial.println();
  Serial.print ( "IP address: " );
  Serial.println ( WiFi.softAPIP() );
  
}

void initHardware()
{
  Serial.begin(115200);
  pinMode(DIGITAL_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  // Don't need to set ANALOG_PIN as input, 
  // that's all it can be.
}

程序下载:
电路:

const int LED_PIN = 5;             // Thing's onboard, green LED
const int ANALOG_PIN = A0;    // The only analog pin on the esp8266
const int DIGITAL_PIN = 12;    // Digital pin to be read

连接一个LED至GPIO5/nodemcu D1、A0 和GPIO12这里没有连接(Nodemcu 引脚对应图)!



上传程序后,手机(或者有无线网的电脑)打开wifi 搜索名为"ESP8266 Thing XXXX"的wifi信号,点击连接,密码为"12345678"。


连接上 ESP8266 AP后,打开手机或电脑浏览器,输入地址:" 192.168.4.1/read ";ESP8266会提供一个web页面展示其ADC和GPIO12的读数,如图:




然后,你再分别输入 :"192.168.4.1/led/0"、"192.168.4.1/led/1",你会发现GPIO5/D1引脚上的LED会根据输入亮灭,手机页面也有变化:





完成实验!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对

签到天数: 866 天

[LV.10]以坛为家III

沙发
 楼主| 发表于 2017-2-9 13:02:33 | 只看该作者
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

板凳
 楼主| 发表于 2017-2-11 09:30:58 | 只看该作者
老朽 发表于 2017-2-10 20:18
折腾了几天,一直没弄成功,用1.6.13,1.8.1没法安装ESP8266库,用1.6.5,1.6.8(已经安装好库的)编译能过 ...

ESP8266 core for arduino 这系列的教程是使用arduino IDE 对ESP8266进行开发的,也就是说,ESP8266既是WIFI模块,又是主控板!这样可以理解吗?不需要arduino UNO R3。
版型选择如下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

地板
 楼主| 发表于 2017-2-11 10:11:59 | 只看该作者
老朽 发表于 2017-2-11 09:41
对,我看明白了,我现在手头是ARDUINO UNO R3的扩展板,所以,搞错了,准备重新整张ESP8266主控板试试看

我的测试模块是nodemcu,板上有串口下载芯片,可以直接下载!
网上还有许多其他类似模块
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

5#
 楼主| 发表于 2017-2-19 08:26:55 | 只看该作者
本帖最后由 AllBlue 于 2017-2-19 08:33 编辑
老朽 发表于 2017-2-18 22:28
const int LED_PIN = 5;             // Thing's onboard, green LED
const int ANALOG_PIN = A0;    // T ...
http://image.yfrobot.com/NODEMCU_DEVKIT_V1.0_PINMAP.png-yf


回复 支持 反对

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

6#
发表于 2017-7-6 19:49:26 | 只看该作者
楼主你好,我是新手,手头上有一块ESP8266模块和一个TTL串口下载器,连上之后可以向模块发送AT指令,我想把你的代码下载到模块里面,要用什么软件啊,求指导下载方法
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

7#
 楼主| 发表于 2017-7-9 09:13:15 | 只看该作者
yangkefeng 发表于 2017-7-6 19:49
楼主你好,我是新手,手头上有一块ESP8266模块和一个TTL串口下载器,连上之后可以向模块发送AT指令,我想把 ...

使用的是arduino IDE,http://www.yfrobot.com/thread-11797-1-1.html 看这个帖子,有相关配置步骤
回复 支持 反对

使用道具 举报

签到天数: 22 天

[LV.4]偶尔看看III

9#
发表于 2019-5-6 17:24:44 | 只看该作者
不错,很值得学习一下
回复 支持 反对

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

10#
发表于 2019-6-16 18:14:43 | 只看该作者
安卓手机连不上这个WiFi

点评

程序烧写进去了吗?手机可以找到wifi连接不上,还是直接找不到wifi信号?  发表于 2019-6-17 14:16
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-4-20 12:21 , Processed in 0.050533 second(s), 25 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表