版权声明:本文为博主徐松亮的原创作品,未经允许不得转载,多谢支持!QQ:5387603
推荐点击此链接:欢迎进入徐松亮博客一站式导航搜索(随时更新)
一,前言
-
适合人群
- 对Arduino开发环境熟悉的开发人员或电子产品研发爱好者
-
本文目的
- 我本身主要用C环境来开发产品,这也是目前专业嵌入式工程师主流的开发模式,本来以为Arduino只是爱好者用的东西,做做实验还行,不能做产品。
- 但比较尴尬的是,Arduino提供很多好用的例程和库,如果正好与需求对应,导致我们用C开发周期需要2周,但是用Arduino开发只要1小时,这就无法接受了,难道我们专业的工程师还不如爱好者不成?
- 再有就是随着Arduino的快速发展,导致库和例程越来越多,系统也越来越稳定。
- 综上,我决定下点时间学习一下Arduino,毕竟正牌专业出身,以专业的基础来学它,事半功倍。
- 现在的观念就是,一定要了解每种开发环境的库与例程,这样有需求的时候就可以选择开发模式,减少开发周期。
- 所以,这篇文章不是带大家做实验,而是总结一下Ardiuno开发ESP8266的库与例程。
-
Arduino介绍与环境搭建
- 详见原创文档:徐松亮ESP8266专项教学1-简介与多种开发环境搭建
-
Arduino免费吗
- 开源且免费
-
Arduino开发模式与micropython开发模式比对
- 从库与例程来看:Ardiuno开发环境要比micropython开发环境强大灵活一些。
二,官方说明文档
三,硬件资源
- NodeMCU电路板(其实凡是ESP8266为核心的电路板都可以使用,对应好IO即可)
四,基础函数分类介绍
-
数字IO控制(图中蓝色引脚D0-D5,D12-D16)
- 输入
- pinMode()
- INPUT
- INPUT_PULLUP
- INPUT_PULLDOWN_16
- digitalRead()
- pinMode()
- 输出
- pinMode()
- OUTPUT
- digitalWrite()
- pinMode()
- 中断(任何引脚,除了P0.16)
- 相关函数
- 设定中断
- attachInterrupt()
- 删除中断
- detachInterrupt()
- 设定中断
- 可以设定的模式
- 变更中断
- 上升沿中断
- 下降沿中断
- 相关函数
- 输入
-
模拟输入(图中ADC)
- 读取VCC电源电压
- ADC_MODE(ADC_VCC)
- ESP.getVcc()
- 读取ADC引脚电压
- analogRead(A0)
- 0.0-1.0V的电压对应0-1024数据
- 读取VCC电源电压
-
模拟输出(利用PWM,0-16引脚都可以使用)
- 设置输出:analogWrite(pin,value)
- pin:0-16
- vale:0-new_range
- 更改范围:analogWriteRange(new_range)
- 默认:0-1023
- 改后:0-new_range
- 更改频率:analogWriteFreq(new_frequency)
- 默认:1kHz
- 改后:new_frequency
- 设置输出:analogWrite(pin,value)
-
计时
- 复位后的ms计时
- millis()
- 复位后的us计时
- micros()
- 复位后的ms计时
-
延时
- ms延时
- 系统会保留wifi与TcpIp的网络连接与处理任务,所以,建议如果用户循环程序中有耗时的处理(>50ms)时,建议加如下面的延时指令周期性释放一下CPU执行权。
- delay(ms)
- us延时
- 死等函数,所以不建议用于超过20ms的应用
- delayMicroseconds(us)
- ms延时
-
串口
- UART0
- Serial.swap()
- 引脚重映射
- Serial.baudRate()
- 设置波特率
- Serial.detectBaudrate(time_t timeoutMillis)
- 自动探测波特率
- Serial.begin()
- 启动串口
- Serial.set_tx()
- 串口发送
- Serial.setDebugOutput(true)
- 设置为调试口
- Serial.swap()
- UART1
- Serial1.baudRate()
- 设置波特率
- Serial1.detectBaudrate(time_t timeoutMillis)
- 自动探测波特率
- Serial1.begin()
- 启动串口
- Serial1.setDebugOutput(true)
- 设置为调试口
- Serial1.baudRate()
- UART0
五,库函数分类介绍
-
Wifi
-
Ticker
- 官网介绍:https://github.com/Toshik/TickerScheduler
- 定时函数,周期执行某个函数。
- 不能执行阻塞操作。
-
EEPROM
- 在SPIFFS之后,仅仅使用flash的一个扇区
- 是不是只有在使用SPIFFS后才能使用EEPROM库?当前未知,有待考证!
- 设定要操作的空间
- EEPROM.begin(size)
- size:4-4096 Bytes
- EEPROM.begin(size)
- 写数据:
- EEPROM.write()
- 提交写数据:
- EEPROM.commit()
- 终止操作
- 相当于执行commit()并释放RAM空间
- EEPROM.end()
- 在SPIFFS之后,仅仅使用flash的一个扇区
-
I2C
- 只支持主模式,最高速率450KHz
- 设定引脚
- Wire.begin(int sda,int scl)
- 常规操作(略)
-
SPI
- 重新设定引脚
- SPI.pins()
- 常规操作(略)
- 重新设定引脚
-
SoftwareSerial
- 可以通过软件扩展多串口,最高波特率115200
- 资料网站:https://github.com/plerup/espsoftwareserial
-
ESP-specific APIs
-
深睡模式
- ESP.deepSleep(microsecond,mode)
- 等待wifi关闭后,进入深睡
- mode
- WAKE_RF_DEFAULT
- WAKE_RFCAL
- WAKE_NO_RFCAL
- WAKE_RF_DISABLE
- 最大深睡时间获取(ms)
- ESP.deepSleepMax()
- ESP.deepSleepInstant(microsecond,mode)
- 直接进入深睡
- ESP.deepSleep(microsecond,mode)
-
RTC-Memory
- 写数据
- ESP.rtcUserMemoryWrite()
- 读数据
- ESP.rtcUserMemoryRead()
- 写数据
-
设备重启
- 重启指令
- ESP.restart()
- 获取重启原因
- ESP.getResetReason()
- 重启指令
-
获取信息
- 获取空闲堆信息
- ESP.getFreeHeap()
- 获取堆碎片信息
- ESP.getHeapFragmentation()
- 获取堆最大申请空间
- ESP.getMaxFreeBlockSize()
- 获取芯片ID
- ESP.getChipId()
- 获取内核版本
- ESP.getCoreVersion()
- 获取SDK版本
- ESP.getSdkVersion()
- 获取主频
- ESP.getCpuFreqMHz()
- 获取当前程序大小
- ESP.getSketchSize()
- 获取空闲的程序空间
- ESP.getFreeSketchSpace()
- 获取当前程序的MD5
- ESP.getSkechMD5()
- 获取Flash芯片ID
- ESP.getFlashChipId()
- 获取Flash芯片容量(根据SDK)
- ESP.getFlashChipSize()
- 获取Flash芯片的真实容量(根据芯片ID)
- ESP.getFlashChipRealSize()
- 获取Flash芯片速度(Hz)
- ESP.getFlashChipSpeed()
- 获取开机后的指令计数
- ESP.getCycleCount()
- 获取电源电压
- ESP.getVcc()
- 获取空闲堆信息
-
-
mDNS/DNS-SD应答
- 多方式本地查询DNS。具体不是很懂,用时再说吧!
-
SSDP
- 暂时没有过,用时再说。
-
DNS server
- DNS服务应用
-
Servo
- 伺服电机的应用库,最多支持24个伺服系统。
- 前12个使用Timer0
- 后12个使用Timer1
-
增强EEPROM
- 改进的EEPROM库,减少回流增加使用寿命。
-
文件系统
- SPIFFS
-
其他库(不包含在IDE中)
- Adafruit_ILI9341
- ILI9341库,这是一款液晶库,SPI接口。
- arduinoVNC
- VNC客户端
- arduinoWebSockets
- WebSocket服务器和客户端
- aREST
- REST API handler library
- Blynk
- easy IoT framework for Makers (check out the Kickstarter page).
- DallasTemperature
- DS18B20等温度器件
- DHT-sensor-library
- DHT11/22的驱动程序
- DimSwitch
- 电子调光镇流器
- Encoder
- 旋转编码器库
- esp8266_mdns
- mDNS库
- ESP-NOW
- Wrapper lib for ESP-NOW
- ESPAsyncTCP
- 异步TCP库
- ESPAsyncWebServer
- 异步Web服务器库
- Homie for ESP8266
- 为ESP8266实现Homie的Arduino框架,一个用于物联网的MQTT约定。
- NeoPixel
- Adafruit的NeoPixel库
- NeoPixelBus
- Arduino NeoPixel library compatible with ESP8266. Use the “DmaDriven” or “UartDriven” branches for ESP8266. Includes HSL color support and more.
- PubSubClient
- MQTT库
- RTC
- Ds1307
- Ds3231
- Souliss, Smart Home
- 基于Arduino, Android, openHAB的智能家居框架
- ST7735
- 1.44寸液晶驱动芯片
- Task
- Arduino非优先多任务库。虽然与所提供的功能中包含的Ticker库相似,但是这个库是为了实现跨Arduino兼容性。
- TickerScheduler
- 库为Ticker提供了简单的调度器以避免WDT重置
- Teleinfo
- 通用法国电能表库读取电信能源监测数据,如消耗,合同,功率,周期,…
- UTFT-ESP8266
- UTFT显示库支持ESP8266
- WiFiManager
- WiFi Connection manager with web captive portal. If it can’t connect, it starts AP mode and a configuration portal so you can choose and enter WiFi credentials.
- OneWire
- Library for Dallas/Maxim 1-Wire Chips.
- Adafruit-PCD8544-Nokia-5110-LCD-Library
- Port of the Adafruit PCD8544 - library for the ESP8266.
- PCF8574_ESP
- GPIO扩展芯片
- Dot Matrix Display Library 2
- 点矩阵显示库(通用16×32)
- SdFat-beta
- sd卡库支持长文件名,基于软件和硬件的SPI和更多。
- FastLED
- 一个可以轻松高效地控制各种LED芯片组的库,比如Neopixel (WS2812B), DotStar, LPD8806等等。包括褪色,梯度,颜色转换功能。
- OLED
- 用于控制I2C连接的OLED显示器的库。测试用0.96英寸的OLED图形显示器。
- MFRC522
- 用于使用Mifare RC522 rfid标签阅读器/写入器的库。
- Ping
- lets the ESP8266 ping a remote machine.
- AsyncPing
- 完全异步Ping库(具有完整的Ping统计信息和硬件MAC地址)。
- Adafruit_ILI9341
五,OTA
-
Arduino IDE
-
Web Browser
-
HTTP Server
六,总结
- 用了一天的时间,把英文说明书看了一遍。本想把例子也列出来,但是发现示例真是太多了,这正是说明Arduino的强大。
- 主要是网络相关的应用例程特别多,或许要是有网络相关的应用,Arduino是个不错的开发环境。