Arduino ESP8266 文档 - 硬件资料

Digital IO(数字输入输出接口)

Arduino中的管脚编号和ESP8266 GPIO管脚编号相对应。可以直接使用pinMode,digitalRead,digitalWrite,例如读GPIO2,使用digitalRead(2)
引脚 0-15 可以使用INPUT, OUTPUT, INPUT_PULLUP。 引脚 16 可以使用INPUT, OUTPUT, INPUT_PULLDOWN_16。 启动时引脚被设置成INPUT
引脚也可以用于其他功能,像 Serial, I2C, SPI。这些功能有对应的库。常见的ESP-12模块引脚对应关系如下图。

image

引脚功能

图中没有显示 6-11引脚,正常情况它们用来连接模块上的闪存芯片。把这些引脚作为IO引脚使用可能导致程序崩溃。
有些开发板和模块(ESP-12ED, NodeMCU 1.0)会把引脚9和11分离出来。如果flash芯片工作在DIO模式下(而不是默认的QIO模式),就可以作为IO使用。
可以通过attachInterrupt,detachInterrupt提供引脚中断功能。除GPIO16外,中断可以附加到任何GPIO引脚上。支持标准Arduino中断类型:CHANGE, RISING, FALLING

Analog input(模拟输入)

ESP8266提供一个ADC通道。它既可用于读取ADC引脚的电压,也可用于读取模块供电电压(VCC)。
若要读取附加在ADC上的外部电压,可以使用analogRead(A0)。ESP8266输入电压范围是0-1.0V,有些开发板可能会使用分压。安全起见最好<1.0V。例如0.5V在512附近取值,则最大电压为1.0V,但是在150附近取值,则最大电压是3.3V, 3.3V可能会损坏ESP8266。
使用ESP.getVcc()读取VCC电压,ADC引脚必须断开并在程序中添加如下代码:

ADC_MODE(ADC_VCC);

这行必须在所有函数体外,比如放在#include行后面。

Analog output(模拟输出)

analogWrite(pin, value) 在指定的引脚上启用PWM功能。PWM可以在0-16引脚上使用。使用analogWrite(pin, 0)来禁用引脚的PWM功能。value取值范围在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()函数完成或者调用延时函数,WiFi 和 TCP/IP库都有机会处理挂起的任务。如果你的程序某处有一个循环需要花费很多时间(>50ms)而没有调用延时函数,你可以考虑添加一个延时函数调用来保存WiFi堆栈稳定运行。
还有一个yield()函数,它相当于delay(0)。另一个要注意的是delayMicroseconds函数排斥其他任务,因此不推荐使用延迟超过20ms。

Serial(串行)

Serial对象的工作方式与常规Arduino的工作方式大致相同。 除硬件FIFO(TX和RX为128字节)外,Serial还有256字节的TX和RX缓冲区。 发送和接收都是中断驱动的。 当相应的FIFO缓冲区满/空时,写和读功能仅打断主程序的运行。 请注意,可以自定义额外的256位缓冲区的长度。
Serial使用UART0,映射到引脚GPIO1(TX)和GPIO3(RX)。 通过在Serial.begin之后调用Serial.swap(),可以将串行重新映射到GPIO15(TX)和GPIO13(RX)。 再次调用Serial.swap()将UART0映射回GPIO1和GPIO3。
Serial1使用UART1,TX引脚是GPIO2.UART1不能用于接收数据,因为通常它被用来连接闪存芯片。要使用Serial1可以调用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,请调用Serial1.setDebugOutput(true)
你也需要使用Serial.setDebugOutput(true)来启用printf()函数的输出功能。
Serial.setRxBufferSize(size_t size)方法允许定义接收缓冲区深度。 默认值为256。
SerialSerial1对象都支持5,6,7,8位数据,奇(O),偶(E),无奇偶(N)校验,以及1或2个停止位。 要设置所需模式,请调用Serial.baudRate(),Serial1.baudRate().返回一个表示当前波特率的int值。例如

Serial.begin(57600); //将波特率设置为57600
int br = Serial.baudRate(); //获取当前波特率
Serial.printf("串口速率是 %d bps", br); //输出 "串口速率是 57600 bps"

SerialSerial1对象都是HardwareSerial类的实例。
原作者做过ESP8266官方的Software Serial库,具体请查看pull request.
请注意,此实现仅适用于基于ESP8266的模块,不适用于其他Arduino模块。
要检测串行口上未知波特率数据,请使用Serial.detectBaudrate(time_t timeoutMillis)。 此方法尝试检测波特率最大超时毫秒数。 如果未检测到波特率,则返回零,否则返回检测到的波特率。 可以在调用Serial.begin()之前调用detectBaudrate()函数,因为它不需要接收缓冲区和串行配置参数。
UART无法检测其他参数,如启动或停止位数,数据位数或奇偶校验。
检测本身不会改变波特率,检测后应使用Serial.begin(detectedBaudrate)设置。
检测速度非常快,只需几个输入字节。
SerialDetectBaudrate.ino是一个完整的用法示例。

Progmem(程序)

程序存储器功能与常规Arduino的工作方式大致相同; 将只读数据和字符串放在只读存储器中并为应用程序释放堆栈。 重要的区别在于,在ESP8266上,文字字符串不是合并的。 这意味着在F(“”)和/或PSTR(“”)内定义的相同文字字符串将占用代码中每个实例的空间。 因此,你需要自己管理重复的字符串。
有一个辅助宏FPSTR()可以很方便的将const PROGMEM字符串传递给__FlashStringHelper

String response1;
response1 += F("http:");
...
String response2;
response2 += F("http:");

使用FPSTR...

const char HTTP[] PROGMEM = "http:";
...
{
String response1;
response1 += FPSTR(HTTP);
...
String response2;
response2 += FPSTR(HTTP);
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 本文翻译自 Arduino 串行通讯的官方文档。 本文的最新版本位于:https://github.com/iwh...
    import_hello阅读 3,613评论 0 7
  • Arduino Due有14个数字I/O,6个模拟I/O,一个复位开关,一个ICSP下载口,7-12v电源供电。 ...
    麦牛2013阅读 3,269评论 0 8
  • due有14个数字i/o,6个模拟i/o,一个复位开关,一个icsp下载口,7-12v电源供电 14个数字i/o,...
    麦牛2013阅读 615评论 1 1
  • 医院这种地方,每天进进出出的,不是为自己生命担忧,身体出现毛病的人、就是医生、护士和其他的工作人员,或病人家属。 ...
    原心_愿阅读 1,470评论 5 6
  • 轻轻的,在茫茫人海中,微微的,拥抱自己的愤怒,耳语盈隐:我需要你! 我已经长大了,我需要自己解决问题而不是依赖他人...
    _辰妈阅读 135评论 0 0