ESP32 入门试玩之前言
来源:互联网 发布:java 打开url连接访问 编辑:程序博客网 时间:2024/05/23 23:57
关于 ESP32 的更多好玩、有趣、实用的博客,请查看 ESP32 系列博客 - 目录
一次偶然的机会,去参加了由乐鑫和 Pycom 公司组织的 Hackathon 活动,并获赠了一块官方最新的 ESP32 开发板 —— 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 的源码是最好的学习资料!尽量多看看它的源码,以及源码中的注释,绝对让你受益匪浅!
- ESP32 入门试玩之前言
- Tensorflow入门之 前言
- ESP32 模块入门
- ESP32 AT 入门指南
- Android 入门前言之 --布局
- 《数据库设计入门经典》之前言
- VS2010/MFC编程入门之前言
- VS2010/MFC编程入门之前言
- VS2010/MFC编程入门之前言
- VS2010/MFC编程入门之前言
- VS2010/MFC编程入门之前言
- php 基础入门篇之前言
- 2014年辛星PHP快速入门之前言
- VS2010/MFC编程入门之前言
- C++编程入门系列之前言
- netty探索之入门前言篇
- ESP32-DevKitC 入门指南(自翻)
- 入门前言
- Java多线程编程讲解
- JVM调优总结 -Xms -Xmx -Xmn -Xss
- 阿里云ECS Centos 7下安装RabbitMQ3.6.1
- ajax请求不能下载文件
- Centos 7.0搭建Mysql数据库
- ESP32 入门试玩之前言
- Android总结篇系列:Android广播机制
- JSP数据的交互
- 字符替换
- 详解Fragment跟Activity之间的通信
- Linux 下修改数据库密码
- 动态网页开发基础
- EXT文件系统扩容
- 搭建Web环境,初识jsp