@lingdantiancai
2016-09-08T15:38:17.000000Z
字数 8109
阅读 9202
Arduino
ESP8266
Nodemcu
首先感谢这群将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电路比划比划,这样对你做成东西很有帮助的(这老外说话还是很有意思的啊)。
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
如果你眼神好的话,应该可以看到我在板子上是用D7来连接灯泡的正极。为什么呢? 哈哈,其实和在arduino上传blink程序一样,只是我将arduino上的13号引脚映射到Nodemcu ESP8266的D7号引脚上。将程序敲上这些代码以后,在tools board里面选择我们刚才下载的esp8266,然后选择连接ESP8266正确的COM口。上传程序,然后看一看会有什么惊艳的事情发生。
如果你对上面的教程很感兴趣,或者你想用这个东西做更酷炫的事情,那么请你点击这里。这是一个亚马逊上一本有关ESP8266 和Nodemce的使用教程的书。这本书涵盖了很多有趣而又好玩的物联网教程。比如搭配arduino制作一个客户机给网页服务器发送数据,或者干脆直接可以利用它搭建起一个网页服务器,上传本地传感器数据,然后通过网页远程控制一些设备。以及如何用它驱动TFT LCD 和I2C等设备。总之,你在这本书里会学到很多东西的。
在这节,我们会看到如何控制开关连接着ESP8266的LED。我们首先会将ESP8266与我们的家庭wifi连接,然后将其将其作为一个网页服务器来使用。当然,我们需要通过串口监视器来检查我们是否连接上wifi,或者登陆家庭路由器后台来看是否连接。
接下来就是一些干货了,会一步一步教你如何让ESP8266连接上家庭wifi,然后如何连接网页同时通过ESP8266控制LED。
首先检查你的线路是否连接正确,这是能够成功的前提。我在强调一下,虽然在程序中定义的是13号引脚,但是我们实际连接的是Nodemcu的D7号引脚,这个千万要连接正确了。
1.| 将你的ESP8266与arduino的IDE连接,然后选择正确的COM口以及板子类型。 |
---|
2.复制粘贴程序 |
3.将代码中的ssid(wifi名字)和password(密码)改为你家的wifi名字密码 |
#include <ESP8266WiFi.h>
const char* ssid = "Magesh";//记得修改为你家的wifi名字密码。
const char* password = "jayakumar";
int ledPin = 13; // GPIO13
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Match the request
int value = LOW;
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(ledPin, HIGH);
value = HIGH;
}
if (request.indexOf("/LED=OFF") != -1) {
digitalWrite(ledPin, LOW);
value = LOW;
}
// Set ledPin according to the request
//digitalWrite(ledPin, value);
// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.print("Led pin is now: ");
if(value == HIGH) {
client.print("On");
} else {
client.print("Off");
}
client.println("<br><br>");
client.println("<a href=\"/LED=ON\"\"><button>Turn On </button></a>");
client.println("<a href=\"/LED=OFF\"\"><button>Turn Off </button></a><br />");
client.println("</html>");
delay(1);
Serial.println("Client disonnected");
Serial.println("");
}
然后上传程序,一切妥当之后,打开串口监视器,查看你的ip地址是多少,样子应该跟下面的图片差不多。
然后便可直接将ip输入到你的任何一个浏览器中查看到控制后台。
在这节,我们将会学习到如何在网页上控制电器设备像风扇,小灯泡之类的东西。如果你以前接触过之类的一些控制特殊设备的特殊控制端,那么你会意识到ESP8266大法的好处,他可以在网页端控制几乎任何设备,最重要的是而且很容易学会,这对我们来说是莫大的福利啊!
首先,确保你的所有设备都连接在同一个wifi环境下面(我们这个教程可没有教你如何从外网透传到内网控制东西的内容。)
这个项目我们需要的元件非常的简单,一个Nodemcu,一个继电器。确保买的是那种5v的继电器(这种继电器使用时不需要外接电路,很简单)。我们可以使用 Nodemcu的Vin端口给继电器供电,但是如果你用的是一般的芯片,那么你只需要给继电器加一个额外的5v供电就可以了。
这个项目中,我只使用了两个继电器,但是实际的程序我却写了四个继电器,可以随时扩展哦。
将下面的程序复制到你的aarduino的IDE中,然后上传到你的Nodemcu中或者你用的其他类型的esp板子上,记得port和board要选对啊。同时别忘了修改程序中的wifi名字密码。
我们登陆到网页(将ip地址复制到浏览器的地址框中)中便可以清楚看到我们连接设备的状态,同时去控制他们的开关。
#include <ESP8266WiFi.h>
const char* ssid = "Magesh";
const char* password = "jayakumar";
; //
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
pinMode(5, OUTPUT);
pinMode(4, OUTPUT);
pinMode(0, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(0, LOW);
digitalWrite(13, LOW);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
// Match the request
if (request.indexOf("/light1on") > 0) {
digitalWrite(5, HIGH);
}
if (request.indexOf("/light1off") >0) {
digitalWrite(5, LOW);
}
if (request.indexOf("/light2on") > 0) {
digitalWrite(4, HIGH);
}
if (request.indexOf("/light2off") >0) {
digitalWrite(4, LOW);
}
if (request.indexOf("/light3on") >0) {
digitalWrite(0, HIGH);
}
if (request.indexOf("/light3off") > 0) {
digitalWrite(0, LOW);
}
if (request.indexOf("/light4on") > 0) {
digitalWrite(13, HIGH);
}
if (request.indexOf("/light4off") > 0) {
digitalWrite(13, LOW);
}
// Set ledPin according to the request
//digitalWrite(ledPin, value);
// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
client.println("</head>");
client.println("<body bgcolor = \"#f7e6ec\">");
client.println("<hr/><hr>");
client.println("<h4><center> Esp8266 Electrical Device Control </center></h4>");
client.println("<hr/><hr>");
client.println("<br><br>");
client.println("<br><br>");
client.println("<center>");
client.println("Device 1");
client.println("<a href=\"/light1on\"\"><button>Turn On </button></a>");
client.println("<a href=\"/light1off\"\"><button>Turn Off </button></a><br />");
client.println("</center>");
client.println("<br><br>");
client.println("<center>");
client.println("Device 2");
client.println("<a href=\"/light2on\"\"><button>Turn On </button></a>");
client.println("<a href=\"/light2off\"\"><button>Turn Off </button></a><br />");
client.println("</center>");
client.println("<br><br>");
client.println("<center>");
client.println("Device 3");
client.println("<a href=\"/light3on\"\"><button>Turn On </button></a>");
client.println("<a href=\"/light3off\"\"><button>Turn Off </button></a><br />");
client.println("</center>");
client.println("<br><br>");
client.println("<center>");
client.println("Device 4");
client.println("<a href=\"/light4on\"\"><button>Turn On </button></a>");
client.println("<a href=\"/light4off\"\"><button>Turn Off </button></a><br />");
client.println("</center>");
client.println("<br><br>");
client.println("<center>");
client.println("<table border=\"5\">");
client.println("<tr>");
if (digitalRead(5))
{
client.print("<td>Light 1 is ON</td>");
}
else
{
client.print("<td>Light 1 is OFF</td>");
}
client.println("<br />");
if (digitalRead(4))
{
client.print("<td>Light 2 is ON</td>");
}
else
{
client.print("<td>Light 2 is OFF</td>");
}
client.println("</tr>");
client.println("<tr>");
if (digitalRead(0))
{
client.print("<td>Light 3 is ON</td>");
}
else
{
client.print("<td>Light 3 is OFF</td>");
}
if (digitalRead(13))
{
client.print("<td>Light 4 is ON</td>");
}
else
{
client.print("<td>Light 4 is OFF</td>");
}
client.println("</tr>");
client.println("</table>");
client.println("</center>");
client.println("</html>");
delay(1);
Serial.println("Client disonnected");
Serial.println("");
}
这样,我们又完成了一个项目。将他分享给你的伙伴,让更多的人感受到这个小芯片的强大功能吧!