官方文档 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. Linux进程间通信(System V) --- 共享内存

    共享内存 IPC 原理 共享内存进程间通信机制主要用于实现进程间大量的数据传输,下图所示为进程间使用共享内存实现大量数据传输的示意图: 共享内存是在内存中单独开辟的一段内存空间,这段内存空间有自己特有 ...

  2. [转]来扯点ionic3[2] 页面一线牵 珍惜这段缘

    本文转自:https://www.jianshu.com/p/de40aeb3d371 往期传送门 来扯点ionic3[0] 吹完牛再入门也不迟 来扯点ionic3[1] 创建一个新页面     上一 ...

  3. ASP.NET Identity 一 (转载)

    来源:http://www.cnblogs.com/r01cn/p/5194257.html 注:本文是[ASP.NET Identity系列教程]的第一篇.本系列教程详细.完整.深入地介绍了微软的A ...

  4. CentOS配置VSFTP服务

    1.安装vsftpd a.查看是否安装vsftp [root@wsyjlly ~]# rpm -q vsftpd package vsftpd is not installed b.如果没有则安装vs ...

  5. Vue 系列之 渲染与事件处理

    渲染相关 列表渲染 与 条件渲染 Vue 中的常见的渲染有 列表渲染 和 条件渲染 所谓条件渲染,则是通过添加一定的逻辑条件来进行 Dom 元素的操作 v-if v-else v-else-if &l ...

  6. React报错:Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix,

    今天在开发时报了以下错误,记录一下 我们不能在组件销毁后设置state,防止出现内存泄漏的情况 出现原因直接告诉你了,组件都被销毁了,还设置个锤子的state啊 解决方案: 利用生命周期钩子函数:co ...

  7. css中那些属性可以被继承

    主要的有: 字体相关:line-height, font-family, font-size, font-style, font-variant, font-weight, font 文本相关: le ...

  8. 英文技术Podcast推荐 - 英语技术一起学

    Podcast(播客)是现在比较流行的音.视频RSS订阅媒体.跟大家分享一下我所关注的一些不错的英文技术podcast,大家感兴趣可以订阅,在关注国外最前沿的技术资讯的同时更加锻炼英文听力(有很多需要 ...

  9. Linux 磁盘分区方案简析

    Linux 磁盘分区方案简析 by:授客 QQ:1033553122   磁盘分区 任何硬盘在使用前都要进行分区.硬盘的分区有两种类型:主分区和扩展分区.一个硬盘上最多只能有4个主分区,其中一个主分区 ...

  10. Sqlserver精简安装选项