ESP32 入门试玩之前言

Posted tidyjiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESP32 入门试玩之前言相关的知识,希望对你有一定的参考价值。

关于 ESP32 的更多好玩、有趣、实用的博客,请查看 ESP32 系列博客 - 目录

一次偶然的机会,去参加了由乐鑫和 Pycom 公司组织的 Hackathon 活动,并获赠了一块官方最新的 ESP32 开发板 —— ESP32-DevKitC,到家几次试玩之后,深深地被乐鑫折服,对它爱不释手。




图: ESP32-DevKitC 开发板

如上图所有,一块开发板,小巧,迷你,接口简单,功能却不简单,只需要一根普通的智能手机USB数据线,就能完成绝大多数操作。


ESP32 的优势


上手快


第一次试玩,用的官方的 esp-idf-template,一边看文档一边动手,从搭建开发环境,到把这个 demo 跑起来(板子作为一个 STA,连接到 WiFi),总共也就半个小时左右。

第一次跑起来后,隔了一段时间,又想跑个 MQTT 试试,然后在网上搜相关资源,发现了一个 ESP32 的 MQTT 组件库 espmqtt,然后通过这个库的作者提供的模板,成功地将 ESP32 接入了中国移动的物联网云平台 OneNET。整个过程耗时 3 天(其中,周末2天)。在接入的过程中也发生了两个小插曲:

  • 发现移动 OneNET 提供的 SDK 存在 2 个 bug,导致我 publish 消息时始终失败,最后分析源码,已经帮他们把 bug 解决掉了。我提交的补丁在这里: https://github.com/cm-heclouds/MQTT/pull/1
  • 发现 espmqtt 组件存在 bug,到时我 publish 质量等级为 QoS2 的消息失败(其实已经成功,但是组件判断错误,以为我 publish 没有成功),也已经帮他们把 bug 解决掉了。我提交的补丁在这里:https://github.com/tuanpmt/espmqtt/pull/6

后来又试了是官方提供的空中升级功能,虽然中间同样遇到了一点问题,但是一个晚上就解决了。

然后就是这几天,打算做个与 audio 相关的项目。然后在 ESP32 的论坛上以 audio 为关键字搜索整个论坛的帖子,发现了一个开源项目 ESP8266_MP3_DECODER。这个项目是做一个网络电台,从服务器上面获取音频数据,然后实时解码,实现播放网络上的音乐的功能。经过几天的学习研究,加上向项目作者的请教,也终于在昨晚基本实现了功能。整个过程耗时 5 天。期间也发现了该项目的 bug:


开源


这一点是我非常看中的一个地方。现在是一个流行开源的年代,在我看来,不开源的原因很有可能是——代码太烂,不敢开源!当然,这是比较偏激的看法,但是至少说明乐鑫对它自己有信心,有勇气!从结果来看,他们的信心和勇气完全来自于他们的实力。

其实乐鑫的代码也并非完全开源,WiFi 驱动就只是赤裸裸地提供了库和头文件,这真实一个悲伤的事实!不过还好 ,它头文件的注释太规范了,以至于我都没想到去看驱动的源码。


规范的代码和注释


正如上面所说,乐鑫的头文件的注释太规范了,让我都不知道该怎么评价了,只有一句话——太具国际范儿了

除了少部分组件是从其它地方移植过来的,只要是他们自己写的组件,代码的注释让我看得神清气爽。

而且代码风格也非常符合我的胃口,O(∩_∩)O哈哈哈~


巧妙/简洁的组织结构


ESP-IDF 中“组件”的概念真实深入我心。整个 ESP-IDF 由一个一个组件构成,各个组件之间的耦合性非常低(部分组件之间存在耦合),使整个工程的结构显得非常清晰。此外,用户在编写应用程序时,也可以完全按照组件来组织代码结构,使应用程序的结构也非常清晰。我上面提到的 ESP8266_MP3_DECODER 就是这样组织代码的。

关于组件的更多概念,请参考 ESP-IDF 的文档 构建系统


丰富的Demo


这一点也非常赞,直接看下面的组织结构:

work@ubuntu:~/esp/esp-idf/examples$ tree -L 2 -d
.
├── bluetooth
│   ├── a2dp_sink
│   ├── ble_adv
│   ├── blufi
│   ├── controller_hci_uart
│   ├── gatt_client
│   ├── gatt_security_server
│   ├── gatt_server
│   └── gatt_server_service_table
├── ethernet
│   └── ethernet
├── get-started
│   ├── blink
│   └── hello_world
├── performance
│   ├── tcp_perf
│   └── udp_perf
├── peripherals
│   ├── adc
│   ├── gpio
│   ├── i2c
│   ├── i2s
│   ├── ledc
│   ├── pcnt
│   ├── rmt_nec_tx_rx
│   ├── sigmadelta
│   ├── spi_master
│   ├── spi_slave
│   ├── timer_group
│   ├── touch_pad_interrupt
│   ├── touch_pad_read
│   ├── uart_echo
│   └── uart_events
├── protocols
│   ├── aws_iot
│   ├── coap_client
│   ├── coap_server
│   ├── http_request
│   ├── https_request
│   ├── mdns
│   ├── openssl_client
│   ├── openssl_server
│   ├── pppos_client
│   └── sntp
├── storage
│   ├── nvs_rw_blob
│   ├── nvs_rw_value
│   ├── sd_card
│   └── wear_levelling
├── system
│   ├── deep_sleep
│   ├── ota
│   └── ulp
└── wifi
    ├── power_save
    ├── wpa2_enterprise
    └── wps

57 directories

学习资料


目前的学习资料不算多,请尽量多阅读阅读官方提供的文档:

另外,本人还打算将 ESP-IDF 翻译成中文文档,源码已经托管到 GitHub 上面了,热烈欢迎有兴趣的小伙伴一起加入翻译呀(尽算仅指出一个错别字也非常欢迎~~)

最后,还不得不说一句,ESP-IDF 的源码是最好的学习资料!尽量多看看它的源码,以及源码中的注释,绝对让你受益匪浅!

以上是关于ESP32 入门试玩之前言的主要内容,如果未能解决你的问题,请参考以下文章

ESP32入门基础之资源管理

ESP32入门基础之资源管理

ESP32入门基础之ESP WebSocket Client

ESP32入门基础之ESP WebSocket Client

ESP32入门基础之SNTP时间显示

ESP32入门基础之SNTP时间显示