徐松亮ESP8266专项教学4-基于Arduino开发ESP8266的适用性

版权声明:本文为博主徐松亮的原创作品,未经允许不得转载,多谢支持!QQ:5387603

推荐点击此链接:欢迎进入徐松亮博客一站式导航搜索(随时更新)


一,前言

  • 适合人群

    • 对Arduino开发环境熟悉的开发人员或电子产品研发爱好者
  • 本文目的

    • 我本身主要用C环境来开发产品,这也是目前专业嵌入式工程师主流的开发模式,本来以为Arduino只是爱好者用的东西,做做实验还行,不能做产品。
    • 但比较尴尬的是,Arduino提供很多好用的例程和库,如果正好与需求对应,导致我们用C开发周期需要2周,但是用Arduino开发只要1小时,这就无法接受了,难道我们专业的工程师还不如爱好者不成?
    • 再有就是随着Arduino的快速发展,导致库和例程越来越多,系统也越来越稳定。
    • 综上,我决定下点时间学习一下Arduino,毕竟正牌专业出身,以专业的基础来学它,事半功倍。
    • 现在的观念就是,一定要了解每种开发环境的库与例程,这样有需求的时候就可以选择开发模式,减少开发周期。
    • 所以,这篇文章不是带大家做实验,而是总结一下Ardiuno开发ESP8266的库与例程
  • Arduino介绍与环境搭建

  • Arduino免费吗

    • 开源且免费
  • Arduino开发模式与micropython开发模式比对

    • 从库与例程来看:Ardiuno开发环境要比micropython开发环境强大灵活一些。

二,官方说明文档

三,硬件资源

  • NodeMCU电路板(其实凡是ESP8266为核心的电路板都可以使用,对应好IO即可)

四,基础函数分类介绍

  • 数字IO控制(图中蓝色引脚D0-D5,D12-D16)

    • 输入
      • pinMode()
        • INPUT
        • INPUT_PULLUP
        • INPUT_PULLDOWN_16
      • digitalRead()
    • 输出
      • pinMode()
        • OUTPUT
      • digitalWrite()
    • 中断(任何引脚,除了P0.16)
      • 相关函数
        • 设定中断
          • attachInterrupt()
        • 删除中断
          • detachInterrupt()
      • 可以设定的模式
        • 变更中断
        • 上升沿中断
        • 下降沿中断
  • 模拟输入(图中ADC)

    • 读取VCC电源电压
      • ADC_MODE(ADC_VCC)
      • ESP.getVcc()
    • 读取ADC引脚电压
      • analogRead(A0)
      • 0.0-1.0V的电压对应0-1024数据
  • 模拟输出(利用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
  • 计时

    • 复位后的ms计时
      • millis()
    • 复位后的us计时
      • micros()
  • 延时

    • ms延时
      • 系统会保留wifi与TcpIp的网络连接与处理任务,所以,建议如果用户循环程序中有耗时的处理(>50ms)时,建议加如下面的延时指令周期性释放一下CPU执行权。
      • delay(ms)
    • us延时
      • 死等函数,所以不建议用于超过20ms的应用
      • delayMicroseconds(us)
  • 串口

    • UART0
      • Serial.swap()
        • 引脚重映射
      • Serial.baudRate()
        • 设置波特率
      • Serial.detectBaudrate(time_t timeoutMillis)
        • 自动探测波特率
      • Serial.begin()
        • 启动串口
      • Serial.set_tx()
        • 串口发送
      • Serial.setDebugOutput(true)
        • 设置为调试口
    • UART1
      • Serial1.baudRate()
        • 设置波特率
      • Serial1.detectBaudrate(time_t timeoutMillis)
        • 自动探测波特率
      • Serial1.begin()
        • 启动串口
      • Serial1.setDebugOutput(true)
        • 设置为调试口

五,库函数分类介绍

  • Wifi

  • Ticker

  • EEPROM

    • 在SPIFFS之后,仅仅使用flash的一个扇区
      • 是不是只有在使用SPIFFS后才能使用EEPROM库?当前未知,有待考证!
    • 设定要操作的空间
      • EEPROM.begin(size)
        • size:4-4096 Bytes
    • 写数据:
      • EEPROM.write()
    • 提交写数据:
      • EEPROM.commit()
    • 终止操作
      • 相当于执行commit()并释放RAM空间
      • EEPROM.end()
  • I2C

    • 只支持主模式,最高速率450KHz
    • 设定引脚
      • Wire.begin(int sda,int scl)
    • 常规操作(略)
  • SPI

    • 重新设定引脚
      • SPI.pins()
    • 常规操作(略)
  • SoftwareSerial

  • 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)
        • 直接进入深睡
    • 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 
    • 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地址)。

五,OTA

  • Arduino IDE

  • Web Browser

  • HTTP Server

六,总结

  • 用了一天的时间,把英文说明书看了一遍。本想把例子也列出来,但是发现示例真是太多了,这正是说明Arduino的强大。
  • 主要是网络相关的应用例程特别多,或许要是有网络相关的应用,Arduino是个不错的开发环境。
发布了28 篇原创文章 · 获赞 81 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/xslxhn/article/details/84065091