官方文档 http://esp8266.github.io/Arduino/versions/2.1.0/doc/libraries.html

引脚口说明 http://yfrobot.com/thread-11798-1-1.html

数字I/O口 Digital IO
Arduino 引脚号直接对应ESP8266 GPIO 引脚。pinMode,digitalRead,和 digitalWrite 函数照常使用,所以读取GPIO2引脚,这样写:digitalRead(2) 。
数字引脚 0~15可以设置为 INPUT,OUTPUT 或者 INPUT_PULLUP 模式。引脚 16可以设置为INPUT,OUTPUT 或者 INPUT_PULLDOWN_16 模式。在启动时,引脚被配置为INPUT。
引脚同样可以提供其他功能,像串行,I2C,SPI。这些函数通常需要使用相应的库。下图为ESP-12模块的引脚图:

可见图中没有数字引脚6~11,因为大部分模块使用这几个引脚连接了flash存储芯片了。这些引脚不可使用,否则可能导致程序崩溃。

注意:有些电路板和模块(ESP-12ED NodeMCU 1.0)也释放了引脚9和11,如果Flash芯片工作在DIO模式下(默认QIO模式),它们可以被当做IO口使用。
引脚中断可以使用 attachInterrupt,detachInterrupt函数。除了GPIO16引脚,其他引脚都可以使用中断功能。标准的Arduino 中断类型都是支持的:CHANGE,RISING,FALLING。

模拟输入 Analog input
ESP8266只有一个ADC通道提供给用户。它可以使用于读取ADC引脚电压,也可使用于读取模块电源电压(VCC)。
读取ADC引脚值电压,使用analogRead(A0)。输入电压范围:0~1.0V。
读取模块电源电压,使用ESP.getVcc() 且ADC引脚不能连接。另外,下面的代码必须添加至程序中:
ADC_MODE(ADC_VCC);
这条代码不能包含在任何函数中,放在程序中 #include 之后即可。
模拟输出 Analog output
analogWrite(pin, value) 在已有的引脚上使能软件PWM功能。PWM可以用在引脚0~16。调用analogWrite(pin, 0) 可以关闭引脚PWM。取值范围:0~ PWMRANGE,默认为1023。 PWM 范围可以使用analogWriteRange(new_range)语句来更改。
PWM 默认频率:1KHz。使用analogWriteFreq(new_frequency) 可以更改频率。

时间与延时  Timing and delays
millis() 和 micros() 分别返回单位为毫秒和微秒的值,复位后值重置。
delay(ms) 暂时程序给定毫秒时间并允许WiFi和TCP/IP任务的运行。delayMicroseconds(us) 暂时程序给定微秒时间。
记住wifi连接后除了素描程序外还有许多代码需要再芯片上运行。每次loop()函数完成时或当delay被调用时,Wifi和TCP/IP库都有机会处理任何等待事件。如果你程序中某处有循环,消耗事件大于50ms且没有调用delay,你可以考虑添加一个调用延时函数以保持Wifi堆栈的平稳运行。
有个 yield()函数和delay(0)功能相同。delayMicroseconds函数,在另一方面,不会为其他任务让步,所以当延时超过20ms时不推荐使用它。

串行 Serial
Serial 功能几乎和普通arduino一样,除了硬件FIFO (128 bytes for TX and RX)有额外256byte TX and RX缓冲区。传输和接收都是中断驱动。当FIFO和缓冲区分别为满和空时,读写功能将阻止程序的运行。
Serial 使用UART0,即引脚映射GPIO1(TX)和GPIO3(RX)。Serial.begin 之后调用Serial.swap()时,Serial引脚将映射到GPIO15(TX)和GPIO13(RX)。再次调用 swap时 引脚映射将回到GPIO1(TX)和GPIO3(RX)。
Serial1 使用UART1,TX引脚为GPIO2。UART1不能用来接收数据因为通常情况RX引脚被用到flash芯片连接了。使用Serail1,调用 Serial1.begin(baudrate)。
如果Serial1没有使用且Serial没有被调换 - 通过在Serial.begin之后调用Serial.set_tx(2)或者直接调用Serial.begin(baud,config,mode,2) 可以将UART0的TX映射到GPIO2。
默认情况下当你调用Serial.begin,Wifi库诊断输出是禁用的。再次启动调试输出,调用Serial.setDebugOutput(true)。调用Serial1.setDebugOutput(true),Serial1重定向调试输出。
你也需要使用Serial.setDebugOutput(true)去使能printf()函数的输出。
Serial和Serial1都支持 5,6,7,8数据位;奇 (O), 偶 (E),无(N) 校验位;1或2停止位。设置所需模式,调用Serial.begin(baudrate,SRIAL_8N1),Serial.begin(baudrate, SERIAL_6E2), etc.

Progmem

程序内存工作特性和arduino页非常相似,在只读存储器中的存放只读数据和字符串,为你的应用释放堆。最重要的区别是在ESP8266上字符串不合并。这意味着在代码中定义在F("")和PSTR("")中的相同字符串在每个实例中都将占用空间。所以你需要自行管理重复的字符串。
有个附加辅助宏,让它更容易通过 const PROGMEM 字符串去使用 FPSTR()(__FlashStringHelper)方法。这样使用将有助于使合并字符串更简便。Not pooling strings...(这尼玛什么鬼,不懂)
[C] 纯文本查看 复制代码
1
2
3
4
5
String response1;
response1 += F("http:");
...
String response2;
response2 += F("http:");

1点亮LED

//总共可用    0-15  16皆可IO  pwm 输出 但是 6-11被系统时钟占用
//实际可用 0 1(TX) 2 3(RX) 4 5 12 13 14 15 16
// 一般RX TX留出 void setup() {
pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
} // the loop function runs over and over again forever
void loop() {
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level digitalWrite(0, LOW); // but actually the LED is on; this is because
digitalWrite(1, LOW); // it is acive low on the ESP-01)
digitalWrite(2, LOW); delay(1000); // Wait for a second
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH digitalWrite(0, HIGH); // but actually the LED is on; this is because
digitalWrite(1, HIGH); // it is acive low on the ESP-01)
digitalWrite(2, HIGH);
delay(2000); // Wait for two seconds (to demonstrate the active low LED)
}

  

  

2按键点亮LED

#define PIN_LED 16 //定义LED灯:PIN_LED所对应的引脚为16号

#define KEY_FLASH 0 //定义KEY_FLASH 对应0号引脚,其实就是FLASH按键位置

void setup() {

  Serial.begin(115200);

  Serial.setDebugOutput(true);

  pinMode(PIN_LED, OUTPUT); //初始化PIN_LED引脚模式为输出

  pinMode(KEY_FLASH, INPUT);//初始化Flash按键模式为输入

  digitalWrite(PIN_LED,HIGH);//初始LED灯置为低电平,表示点亮

  delay(1000); //延时1秒

}

//自定义按键函数

void keydo(){

 //读出当前按键状态,0表示抬起断开,1为按下接通

 int k;

 k=digitalRead(KEY_FLASH);

 Serial.println("\r\n keydo:");

 Serial.write(k);

 Serial.println();

 if(k==0) 

  digitalWrite(PIN_LED,HIGH); //高电平表示灯灭

  else

  digitalWrite(PIN_LED,LOW);

}

void loop() {

  //digitalWrite(PIN_LED, LOW);  

  delay(500);                      

  keydo();

  //digitalWrite(PIN_LED, HIGH);  

  delay(500);                      

}

  

3生成PWM

#define PIN_LED 16

void setup() {

  pinMode(PIN_LED, OUTPUT);

  analogWrite(PIN_LED, 0);//模拟信号输出

}

void loop() {

  for (int i = 0; i < 1024; i++)

  {//电平升高,从明到暗

    analogWrite(PIN_LED, i);

    delay(2);

  }

  for (int i = 1024; i >= 0; i--)

  {//电平降低,从暗到明

    analogWrite(PIN_LED, i);

    delay(2);

  }

}

  4控制舵机

/* Sweep
by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain. modified 28 May 2015
by Michael C. Miller
modified 8 Nov 2013
by Scott Fitzgerald http://arduino.cc/en/Tutorial/Sweep
*/ #include <Servo.h> Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards void setup()
{
myservo.attach(2); // attaches the servo on GIO2 to the servo object
} void loop()
{
int pos; for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}

  

5 中断函数  需要上拉电阻 10k

//connect a jumper from GPIO 14 to ground to start test

#define GPIO_PIN 14 

uint8_t led = LOW;

void setup(){
pinMode(GPIO_PIN, INPUT);
pinMode(BUILTIN_LED, OUTPUT);
setLED();
attachInterrupt(GPIO_PIN, highInterrupt, RISING); } void highInterrupt(){
led = HIGH;
detachInterrupt(GPIO_PIN);
attachInterrupt(GPIO_PIN, lowInterrupt, FALLING);
} void lowInterrupt(){
led = LOW;
detachInterrupt(GPIO_PIN);
attachInterrupt(GPIO_PIN, highInterrupt, RISING);
} void setLED(){
digitalWrite(BUILTIN_LED, led); } void loop(){
setLED();
}

  

示例2 不可用

引脚作为输入的声明是通过pinMode函数完成的,pinMode函数接收引脚作为第一个参数,并将第二个参数作为模式接收。

pinMode(interruptPin, INPUT_PULLUP);

  

 

最后,我们使用attachInterrupt函数将中断附加到引脚。它接收中断号码作为第一个参数,作为第二个参数的中断服务程序,以及第三个中断模式。

在第一个参数中,我们将使用  digitalPinToInterrupt函数,该函数接收中断引脚作为输入,将实际的数字引脚转换为特定的中断号[6]。

作为第二个参数,我们将通过我们将定义后者的处理函数。这个函数不能使用任何参数,也不会返回任何结果[6]。

作为第三个参数,我们可以通过3种支持的中断类型之一:CHANGE,RISING和FALLING [7]。在我们的情况下,我们不会检测到信号的下降沿,所以我们通过下降。

const byte interruptPin = 13;  // 13 对应板载LED   2 对应433中断0
volatile byte interruptCounter = 0;
int numberOfInterrupts = 0; void setup() { Serial.begin(115200);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, FALLING); } void handleInterrupt() {
interruptCounter++;
} void loop() { if(interruptCounter>0){ interruptCounter--;
numberOfInterrupts++; Serial.print("An interrupt has occurred. Total: ");
Serial.println(numberOfInterrupts);
} }

  6 通信433接收

//connect a jumper from GPIO 14 to ground to start test

#define GPIO_PIN 14 //  14--D5  不要上拉电阻

uint8_t led = LOW;

void setup(){
pinMode(GPIO_PIN, INPUT);
pinMode(BUILTIN_LED, OUTPUT);
setLED();
attachInterrupt(GPIO_PIN, highInterrupt, RISING); } void highInterrupt(){
led = HIGH;
detachInterrupt(GPIO_PIN);
attachInterrupt(GPIO_PIN, lowInterrupt, FALLING);
} void lowInterrupt(){
led = LOW;
detachInterrupt(GPIO_PIN);
attachInterrupt(GPIO_PIN, highInterrupt, RISING);
} void setLED(){
digitalWrite(BUILTIN_LED, led); } void loop(){
setLED();
}

  

Arduino IDE for ESP8266 项目(1) 点亮灯+按键LED+pwm的更多相关文章

  1. Arduino IDE for ESP8266 项目云盒子(2)一键自配置+网页服务器

    https://item.taobao.com/item.htm?spm=a230r.1.14.20.eYblO3&id=521945102409&ns=1&abbucket= ...

  2. Arduino IDE for ESP8266 项目(4)HTTP客户端+服务端

    Arduio for esp8266  官网API:http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html 很有 ...

  3. Arduino IDE for ESP8266 项目云盒子(3)外网访问

    互联网访问esp8266 https://item.taobao.com/item.htm?spm=a230r.1.14.20.eYblO3&id=521945102409&ns=1& ...

  4. Arduino IDE for ESP8266 项目云盒子 (1)AP直接模式

    手机直接连接esp8266辐射的WIFI,通信. https://item.taobao.com/item.htm?spm=a230r.1.14.20.eYblO3&id=5219451024 ...

  5. Arduino IDE for ESP8266 项目云盒子(4)组网

  6. Arduino IDE for ESP8266 项目(3)创建AP+STA

    官网API:http://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/readme.html STA (客户端)手机连接路由器 S1 *简 ...

  7. Arduino IDE for ESP8266 项目(2)wifi扫描

    #include "ESP8266WiFi.h" void setup() { Serial.begin(115200); //设定WiFi为STA模式,如果先前已连接上AP,则与 ...

  8. ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  9. Arduino IDE搭建ESP8266开发环境,文件下载过慢解决方法 | ESP-01制作WiFi开关教程,改造宿舍灯

    1. Arduino IDE配置ESP8266环境 参考:https://www.jianshu.com/p/cb0274d612b5 首先从 Arduino 官网 下载最新版本的 Arduino I ...

随机推荐

  1. SQLServer删除登录记录用户名和密码

    介绍: 作为一名开发人员都会知道我们做的项目都要用到数据库,数据库都需要账号和密码,然而问题来了,做的东西多了那些没用的账号和密码还在哪里纠缠着我们.所有我们不能忍了删除掉他. 网上很多都是2008的 ...

  2. 过三关 Java冒泡排序选择排序插入排序小练习

    材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...

  3. js .map方法

    map这里的map不是“地图”的意思,而是指“映射”.[].map(); 基本用法跟forEach方法类似: array.map(callback,[ thisObject]); callback的参 ...

  4. MAC MYSQ忘记密码重置方法

    网友的方法,记个笔记请勿转载. step1: 关闭mysql服务:  苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server) ...

  5. 纯css3实现的动画导航菜单

    测试咯 css3 前端特效代码 网页模板 图片素材 css3 前端特效代码 网页模板 图片素材 css3 前端特效代码 网页模板 图片素材 css3 前端特效代码 网页模板 图片素材 css3 前端特 ...

  6. input上传文件个数控制

    HTML: <h3>请上传[2,5]个文件</h3> <form action="" enctype="multipart/form-dat ...

  7. 【代码笔记】Web-ionic-列表

    一,效果图. 二,index.html代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  8. 函数节流scroll,兼容火狐滚轮事件

    //函数节流 var wheelTimeout; var wheelFun = function (func) { if (wheelTimeout) { return; } func(); whee ...

  9. Android SDK Manager无法更新的解决方案

    Android SDK Manager -> Tools -> Options HTTP Proxy Server:mirrors.neusoft.edu.cn HTTP Proxy Po ...

  10. Lightning 组件基础知识

    Lightning框架简介 Lightning框架是Salesforce提供的一套基于用户界面的开发框架,对于开发单页面应用(Single Page Application)有很大的帮助.它和Visu ...