Arduino IDE for ESP8266 项目(1) 点亮灯+按键LED+pwm
官方文档 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模块的引脚图:
注意:有些电路板和模块(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
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 outputpinMode(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 leveldigitalWrite(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 seconddigitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGHdigitalWrite(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); //高电平表示灯灭elsedigitalWrite(PIN_LED,LOW);}void loop() {//digitalWrite(PIN_LED, LOW); delay(500); keydo();//digitalWrite(PIN_LED, HIGH); delay(500); }
3生成PWM
#define PIN_LED 16void 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控制舵机
/* Sweepby BARRAGAN <http://barraganstudio.com> This example code is in the public domain.modified 28 May 2015by Michael C. Millermodified 8 Nov 2013by Scott Fitzgeraldhttp://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 boardsvoid 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();
}
转载于:https://www.cnblogs.com/kekeoutlook/p/8292444.html
Arduino IDE for ESP8266 项目(1) 点亮灯+按键LED+pwm相关推荐
- 用arduino IDE开发esp8266 wifi
用arduino IDE开发esp8266 被临时通知开发一个网络传输数据,于是用起我好旧不用的esp8266,记得当初大一时候第一次使用网络使用是stm32+esp8266,比现在用乐鑫的node ...
- 解决使用Arduino IDE 下载esp8266开发版很慢的问题(支持任何版本)
0.添加平台索引 文件-首选项 填入 http://arduino.esp8266.com/stable/package_esp8266com_index.json 1.下载最新的安装包 下载地址:h ...
- Arduino IDE安装 ESP8266 文件系统上传工具
ESP8266 Arduino IDE 文件上传工具 首先关闭Arduino IDE. 把下载的压缩包解压,复制ESP8266FS文件夹到Arduino IDE安装目录的tools目录下 打开Ardu ...
- Arduino IDE使用esp8266 usb ttl接线说明
1.第一种接线方法 1 2.第二种接线方法 方便操作简单 不需要插线和拔线 接地悬空vcc 接入拔出等操作 操作步骤 1.开发板下载或者运行 获取地址 [获取地址] (https://share.we ...
- ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... 快速导航 单片机菜鸟的博客快速索引(快速找到你 ...
- ESP8266开发-Arduino IDE安装、配置与使用
ESP8266是一款价格十分亲民的wifi模块,在某宝上一块ESP8266开发板只要10几块钱!可以买来玩玩一些物联网相关的小项目. ESP8266的开发方式有多种,目前我了解到的有: 使用Ardui ...
- 天猫精灵 python_利用天猫精灵控制ESP8266(NodeMCU开发板)arduino ide开发
第一 下载demo例程 下载地址: 点击下载 本demo 是利用arduino IDE开发,关于arduino IDE 的ESP8266环境配置可参考:环境配置: 点击跳转 第二 修改demo例程 需 ...
- arduinoesp8266定时器_ESP8266深度睡眠与Arduino IDE(NodeMCU)
本指南展示了如何使用Arduino IDE与ESP8266(NodeMCU)一起使用深度睡眠.我们将使用定时器唤醒来唤醒深度睡眠,并使用复位(RST)引脚来唤醒外部唤醒. 引入深度睡眠模式 如果您使用 ...
- Arduino core for ESP8266 安装失败问题处理方法
文章目录 目的 离线开发板数据包(鱼) 安装最新开发板数据包(渔) 总结 目的 理论上Arduino IDE安装开发板数据包是非常方便的,不过在国内的网络环境下有时候就会很纠结.另外Arduino I ...
- Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器
一.硬件准备 USB转ESP8266两块.DHT11温度湿度传感器.ESP8266-01/ESP8266-01一块(如果学习的话多买几块,ESP-01/ESP-01S的区别) USB转ESP8266 ...
最新文章
- Ubuntu 32下Android NDK+NEON的配置过程及简单使用举例
- 智能体到底是什么?这里有一篇详细解读
- SQL Server 2008 安装问题
- Spring-注入参数详解-[通过util命名空间简化集合类型的配置]
- 2019\Province_C_C++_B\试题G-完全二叉树的权值
- win7安装oracle9i 补丁_最详细图解Windows7x64更新安装教程
- scala使用zip合并两个集合为二元组集合
- redux 和 mobX对比
- PythonTips1
- mysql case then效率快_详解Mysql case then使用
- python高阶函数map reduce filter sorted_【Python入门】7.高阶函数之 map( )、reduce( )、filter( )、sorted( )的用法...
- 多种交换机端口镜像 Port Mirroring 配置
- Python金融大数据分析——第11章 统计学(2)投资组合优化 笔记
- 侨鑫集团:不一样的CIO,不一样的数字化转型之路
- Docker 安装 It seems there is already a Binary at
- 帮你学会webpack
- 简单几个方法教你怎么把PDF压缩小,试试你就知道
- SpringBoot整合GraphQL第(一)章节
- 物体重心的特点是什么_物体的重心
- ddt python_python——DDT
热门文章
- 异数OS 开放式闭源继承人协议
- [STM32]Cubemx+USBAudio声卡+I2S+DMA+WM8978实验记录(未解决)
- thinkphp5 in_array函数 不区分大小写的实现
- 2022Java后端之美团笔试题
- 燕大学子知网使用手册
- 计算机专业研究生平均月薪,广东:计算机专业研究生月薪过万 本科生学针灸推拿工资最高...
- 【操作系统安装与引导】CSM与安全启动对UEFI引导的影响与处理
- 【手撕算法】PatchMatch图像修复算法C++实现
- SQL server日志文件过大处理方式
- html怎么修改像素,PS怎么修改像素又不改变尺寸?