[关闭]
@lingdantiancai 2016-09-08T15:38:17.000000Z 字数 8109 阅读 9202

Quick Start to Nodemcu (ESP8266)on Arduino IDE(Nodemcu 快速入门)

Arduino ESP8266 Nodemcu


利用NodemcuESP8266制作web服务器

此处输入图片的描述

首先感谢这群将ESP8266移植到ArduinoIDE上的大牛们。是你们让我们广大

arduino爱好者能够很方便且愉快的使用ESP8266。你们的工作很早前已经

做完,但是现在才来感谢你们,不要嫌太迟啊,嘿嘿。

安装永远是第一步

首先让我们在arduinoIDE上安装支持ESP8266的控件,然后再来一起点亮

一颗小灯(哈哈,点亮小灯,有点类似于学程序中的hello world

好的,现在我们一步一步来

首先打开arduino的IDE, 点击files 然后找到preference ,如下图所示:

此处输入图片的描述

复制下面这个网址到 Additional boards Manager

http://arduino.esp8266.com/stable/package_esp8266com_index.json

点击ok完成设置。

下一步打开ToolsT中的Board,看到展开的菜单里面有一个Board Manage,打开它。

此处输入图片的描述

完成上面的步骤后,你应该会看到这样的图标。

此处输入图片的描述

在搜索栏里面输入esp8266,点击安装。
当这一切步骤完成之后,那么我们的安装工作就完成了。我们就可以给Nodemcu上传程序了。

此处输入图片的描述

这个例子用的是Nodemcu ESP8266,如果你用的是其他的什么wifi模块或者和板子,可以对照着ESP8266电路比划比划,这样对你做成东西很有帮助的(这老外说话还是很有意思的啊)。

  1. void setup() {
  2. // initialize digital pin 13 as an output.
  3. pinMode(13, OUTPUT);
  4. }
  5. // the loop function runs over and over again forever
  6. void loop() {
  7. digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
  8. delay(1000); // wait for a second
  9. digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
  10. delay(1000); // wait for a second
  11. }

如果你眼神好的话,应该可以看到我在板子上是用D7来连接灯泡的正极。为什么呢? 哈哈,其实和在arduino上传blink程序一样,只是我将arduino上的13号引脚映射到Nodemcu ESP8266的D7号引脚上。将程序敲上这些代码以后,在tools board里面选择我们刚才下载的esp8266,然后选择连接ESP8266正确的COM口。上传程序,然后看一看会有什么惊艳的事情发生。

如果你对上面的教程很感兴趣,或者你想用这个东西做更酷炫的事情,那么请你点击这里。这是一个亚马逊上一本有关ESP8266 和Nodemce的使用教程的书。这本书涵盖了很多有趣而又好玩的物联网教程。比如搭配arduino制作一个客户机给网页服务器发送数据,或者干脆直接可以利用它搭建起一个网页服务器,上传本地传感器数据,然后通过网页远程控制一些设备。以及如何用它驱动TFT LCD 和I2C等设备。总之,你在这本书里会学到很多东西的。

第一步:利用网页控制LED

在这节,我们会看到如何控制开关连接着ESP8266的LED。我们首先会将ESP8266与我们的家庭wifi连接,然后将其将其作为一个网页服务器来使用。当然,我们需要通过串口监视器来检查我们是否连接上wifi,或者登陆家庭路由器后台来看是否连接。

接下来就是一些干货了,会一步一步教你如何让ESP8266连接上家庭wifi,然后如何连接网页同时通过ESP8266控制LED。
此处输入图片的描述
首先检查你的线路是否连接正确,这是能够成功的前提。我在强调一下,虽然在程序中定义的是13号引脚,但是我们实际连接的是Nodemcu的D7号引脚,这个千万要连接正确了。

1.| 将你的ESP8266与arduino的IDE连接,然后选择正确的COM口以及板子类型。
2.复制粘贴程序
3.将代码中的ssid(wifi名字)和password(密码)改为你家的wifi名字密码
  1. #include <ESP8266WiFi.h>
  2. const char* ssid = "Magesh";//记得修改为你家的wifi名字密码。
  3. const char* password = "jayakumar";
  4. int ledPin = 13; // GPIO13
  5. WiFiServer server(80);
  6. void setup() {
  7. Serial.begin(115200);
  8. delay(10);
  9. pinMode(ledPin, OUTPUT);
  10. digitalWrite(ledPin, LOW);
  11. // Connect to WiFi network
  12. Serial.println();
  13. Serial.println();
  14. Serial.print("Connecting to ");
  15. Serial.println(ssid);
  16. WiFi.begin(ssid, password);
  17. while (WiFi.status() != WL_CONNECTED) {
  18. delay(500);
  19. Serial.print(".");
  20. }
  21. Serial.println("");
  22. Serial.println("WiFi connected");
  23. // Start the server
  24. server.begin();
  25. Serial.println("Server started");
  26. // Print the IP address
  27. Serial.print("Use this URL to connect: ");
  28. Serial.print("http://");
  29. Serial.print(WiFi.localIP());
  30. Serial.println("/");
  31. }
  32. void loop() {
  33. // Check if a client has connected
  34. WiFiClient client = server.available();
  35. if (!client) {
  36. return;
  37. }
  38. // Wait until the client sends some data
  39. Serial.println("new client");
  40. while(!client.available()){
  41. delay(1);
  42. }
  43. // Read the first line of the request
  44. String request = client.readStringUntil('\r');
  45. Serial.println(request);
  46. client.flush();
  47. // Match the request
  48. int value = LOW;
  49. if (request.indexOf("/LED=ON") != -1) {
  50. digitalWrite(ledPin, HIGH);
  51. value = HIGH;
  52. }
  53. if (request.indexOf("/LED=OFF") != -1) {
  54. digitalWrite(ledPin, LOW);
  55. value = LOW;
  56. }
  57. // Set ledPin according to the request
  58. //digitalWrite(ledPin, value);
  59. // Return the response
  60. client.println("HTTP/1.1 200 OK");
  61. client.println("Content-Type: text/html");
  62. client.println(""); // do not forget this one
  63. client.println("<!DOCTYPE HTML>");
  64. client.println("<html>");
  65. client.print("Led pin is now: ");
  66. if(value == HIGH) {
  67. client.print("On");
  68. } else {
  69. client.print("Off");
  70. }
  71. client.println("<br><br>");
  72. client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");
  73. client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");
  74. client.println("</html>");
  75. delay(1);
  76. Serial.println("Client disonnected");
  77. Serial.println("");
  78. }

然后上传程序,一切妥当之后,打开串口监视器,查看你的ip地址是多少,样子应该跟下面的图片差不多。
然后便可直接将ip输入到你的任何一个浏览器中查看到控制后台。

此处输入图片的描述

第二步,用Nodemcu做服务器控制实际的东西

在这节,我们将会学习到如何在网页上控制电器设备像风扇,小灯泡之类的东西。如果你以前接触过之类的一些控制特殊设备的特殊控制端,那么你会意识到ESP8266大法的好处,他可以在网页端控制几乎任何设备,最重要的是而且很容易学会,这对我们来说是莫大的福利啊!

首先,确保你的所有设备都连接在同一个wifi环境下面(我们这个教程可没有教你如何从外网透传到内网控制东西的内容。)

这个项目我们需要的元件非常的简单,一个Nodemcu,一个继电器。确保买的是那种5v的继电器(这种继电器使用时不需要外接电路,很简单)。我们可以使用 Nodemcu的Vin端口给继电器供电,但是如果你用的是一般的芯片,那么你只需要给继电器加一个额外的5v供电就可以了。
此处输入图片的描述
这个项目中,我只使用了两个继电器,但是实际的程序我却写了四个继电器,可以随时扩展哦。
此处输入图片的描述
将下面的程序复制到你的aarduino的IDE中,然后上传到你的Nodemcu中或者你用的其他类型的esp板子上,记得port和board要选对啊。同时别忘了修改程序中的wifi名字密码。

我们登陆到网页(将ip地址复制到浏览器的地址框中)中便可以清楚看到我们连接设备的状态,同时去控制他们的开关。

  1. #include <ESP8266WiFi.h>
  2. const char* ssid = "Magesh";
  3. const char* password = "jayakumar";
  4. ; //
  5. WiFiServer server(80);
  6. void setup() {
  7. Serial.begin(115200);
  8. delay(10);
  9. pinMode(5, OUTPUT);
  10. pinMode(4, OUTPUT);
  11. pinMode(0, OUTPUT);
  12. pinMode(13, OUTPUT);
  13. digitalWrite(5, LOW);
  14. digitalWrite(4, LOW);
  15. digitalWrite(0, LOW);
  16. digitalWrite(13, LOW);
  17. // Connect to WiFi network
  18. Serial.println();
  19. Serial.println();
  20. Serial.print("Connecting to ");
  21. Serial.println(ssid);
  22. WiFi.begin(ssid, password);
  23. while (WiFi.status() != WL_CONNECTED) {
  24. delay(500);
  25. Serial.print(".");
  26. }
  27. Serial.println("");
  28. Serial.println("WiFi connected");
  29. // Start the server
  30. server.begin();
  31. Serial.println("Server started");
  32. // Print the IP address
  33. Serial.print("Use this URL to connect: ");
  34. Serial.print("http://");
  35. Serial.print(WiFi.localIP());
  36. Serial.println("/");
  37. }
  38. void loop() {
  39. // Check if a client has connected
  40. WiFiClient client = server.available();
  41. if (!client) {
  42. return;
  43. }
  44. // Wait until the client sends some data
  45. Serial.println("new client");
  46. while(!client.available()){
  47. delay(1);
  48. }
  49. // Read the first line of the request
  50. String request = client.readStringUntil('\r');
  51. Serial.println(request);
  52. client.flush();
  53. // Match the request
  54. if (request.indexOf("/light1on") > 0) {
  55. digitalWrite(5, HIGH);
  56. }
  57. if (request.indexOf("/light1off") >0) {
  58. digitalWrite(5, LOW);
  59. }
  60. if (request.indexOf("/light2on") > 0) {
  61. digitalWrite(4, HIGH);
  62. }
  63. if (request.indexOf("/light2off") >0) {
  64. digitalWrite(4, LOW);
  65. }
  66. if (request.indexOf("/light3on") >0) {
  67. digitalWrite(0, HIGH);
  68. }
  69. if (request.indexOf("/light3off") > 0) {
  70. digitalWrite(0, LOW);
  71. }
  72. if (request.indexOf("/light4on") > 0) {
  73. digitalWrite(13, HIGH);
  74. }
  75. if (request.indexOf("/light4off") > 0) {
  76. digitalWrite(13, LOW);
  77. }
  78. // Set ledPin according to the request
  79. //digitalWrite(ledPin, value);
  80. // Return the response
  81. client.println("HTTP/1.1 200 OK");
  82. client.println("Content-Type: text/html");
  83. client.println(""); // do not forget this one
  84. client.println("<!DOCTYPE HTML>");
  85. client.println("<html>");
  86. client.println("<head>");
  87. client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
  88. client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
  89. client.println("</head>");
  90. client.println("<body bgcolor = \"#f7e6ec\">");
  91. client.println("<hr/><hr>");
  92. client.println("<h4><center> Esp8266 Electrical Device Control </center></h4>");
  93. client.println("<hr/><hr>");
  94. client.println("<br><br>");
  95. client.println("<br><br>");
  96. client.println("<center>");
  97. client.println("Device 1");
  98. client.println("<a href=\"/light1on\"\"><button>Turn On </button></a>");
  99. client.println("<a href=\"/light1off\"\"><button>Turn Off </button></a><br />");
  100. client.println("</center>");
  101. client.println("<br><br>");
  102. client.println("<center>");
  103. client.println("Device 2");
  104. client.println("<a href=\"/light2on\"\"><button>Turn On </button></a>");
  105. client.println("<a href=\"/light2off\"\"><button>Turn Off </button></a><br />");
  106. client.println("</center>");
  107. client.println("<br><br>");
  108. client.println("<center>");
  109. client.println("Device 3");
  110. client.println("<a href=\"/light3on\"\"><button>Turn On </button></a>");
  111. client.println("<a href=\"/light3off\"\"><button>Turn Off </button></a><br />");
  112. client.println("</center>");
  113. client.println("<br><br>");
  114. client.println("<center>");
  115. client.println("Device 4");
  116. client.println("<a href=\"/light4on\"\"><button>Turn On </button></a>");
  117. client.println("<a href=\"/light4off\"\"><button>Turn Off </button></a><br />");
  118. client.println("</center>");
  119. client.println("<br><br>");
  120. client.println("<center>");
  121. client.println("<table border=\"5\">");
  122. client.println("<tr>");
  123. if (digitalRead(5))
  124. {
  125. client.print("<td>Light 1 is ON</td>");
  126. }
  127. else
  128. {
  129. client.print("<td>Light 1 is OFF</td>");
  130. }
  131. client.println("<br />");
  132. if (digitalRead(4))
  133. {
  134. client.print("<td>Light 2 is ON</td>");
  135. }
  136. else
  137. {
  138. client.print("<td>Light 2 is OFF</td>");
  139. }
  140. client.println("</tr>");
  141. client.println("<tr>");
  142. if (digitalRead(0))
  143. {
  144. client.print("<td>Light 3 is ON</td>");
  145. }
  146. else
  147. {
  148. client.print("<td>Light 3 is OFF</td>");
  149. }
  150. if (digitalRead(13))
  151. {
  152. client.print("<td>Light 4 is ON</td>");
  153. }
  154. else
  155. {
  156. client.print("<td>Light 4 is OFF</td>");
  157. }
  158. client.println("</tr>");
  159. client.println("</table>");
  160. client.println("</center>");
  161. client.println("</html>");
  162. delay(1);
  163. Serial.println("Client disonnected");
  164. Serial.println("");
  165. }

这样,我们又完成了一个项目。将他分享给你的伙伴,让更多的人感受到这个小芯片的强大功能吧!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注