ESP32 入门试玩之前言

来源:互联网 发布:java 打开url连接访问 编辑:程序博客网 时间:2024/05/23 23:57

关于 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:

  • https://github.com/MrBuddyCasino/ESP32_MP3_Decoder/issues/6

开源


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

其实乐鑫的代码也并非完全开源,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    └── wps57 directories

学习资料


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

  • http://www.espressif.com/zh-hans/products/hardware/esp32/resources。

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

  • 中文源码:https://github.com/tidyjiang8/esp-idf-zh
  • 网页预览:http://iot-fans.xyz/esp/esp-idf-zh/index.html

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

5 0
原创粉丝点击