- 2023-11-28
-
回复了主题帖:
【得捷电子Follow me第3期】0. 开箱贴
秦天qintian0303 发表于 2023-11-28 08:29
楼主这次购买的很丰富 啊
就买了推荐的那几样
-
回复了主题帖:
【得捷电子Follow me第3期】1. 任务1-编译自己的 Micropython 系统
dcexpert 发表于 2023-11-28 09:42
安装esp-idf是个很费劲的事情,github太不稳定了。
确实,大部分时间就是在配置环境上面
- 2023-11-27
-
发表了主题帖:
【得捷电子Follow me第3期】1. 任务1-编译自己的 Micropython 系统
> 任务1-编译自己的 Micropython 系统
>
> - 编译安装 ESP-IDF
> - 使用 ESP-IDF 编译 Micropython,其中包含自定义的固件内容(点灯)
> - 烧录 Micropython 并进行验证
>
> 由于在 Windows 上编译比较麻烦,我特意装了一个 Deepin/Linux 用来编译,下面就不再提及。
[TOC]
1. ### 安装 ESP-IDF
ESP-IDF是乐鑫为ESP32和ESP32-S/C系列芯片提供的软件开发框架,在Seeed Studio XIAO ESP32C3上支持最新的 Micropython 是基于 ESP-IDF 5 构建的,所以我们需要先安装 ESP-IDF 5 来为 MicroPython做准备。
首先,需要安装一些软件包,如git、wget、flex、bison、gperf、python3、python3-pip、python3-venv、cmake、ninja-build、ccache、libffi-dev、libssl-dev、dfu-util、libusb-1.0-0等,这些软件包是编译ESP-IDF所需的。
```bash
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
```
然后,我们就需要从远程仓库克隆 IDF 源码和子模块
```bash
mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
```
接着,需要安装ESP-IDF所需的工具,如工具链、构建工具、Python环境等,可以运行install.sh脚本来自动安装这些工具,运行以下命令:
```bash
cd ~/esp/esp-idf
./install.sh esp32
```
最后我们需要导入环境变量
```bash
. $HOME/esp/esp-idf/export.sh
```
为了以后每次编译更加方便,我在`~/.bashrc`添加了以下内容
以后每次想编译 Micropython,只需要运行`espenv`即可
```bash
export IDF_PATH=/home/antonvanke/esp/esp-idf
alias espenv=". $IDF_PATH/export.sh"
```
2. ### 编译和烧录 Micropython
编译并安装完 ESP-IDF 后,就可以编译 Micropython 了,首先从远程仓库拉取最新的源码,
```bash
git clone --recursive https://github.com/micropython/micropython.git
```
然后我们就可以进行编译了,如果你还没有导入环境变量,根据上一节内容执行`espenv`即可。首先编译交叉编译器。
```bash
cd micropython
make -C mpy-cross
```
然后我们进入到 ESP32 的目录
```bash
cd ports/esp32
ls
```
可以发现有一个叫做`modules`的文件夹,这个文件夹内存放着用 MPY 编写的部分代码和驱动,我们可以编写一个简单的亮灯代码(SEEED STUDIO EXPANSION BASE XIAO扩展板[引脚示意图](https://wiki.seeedstudio.com/Seeeduino-XIAO-Expansion-Board/#pinout-diagram)),借用一个 IIC 实现,新建一个`blink.py`,代码如下:
```python
import time
import machine
led = machine.Pin(6, machine.Pin.OUT)
while True:
time.sleep_ms(100)
led.value(not led.value())
```
我们可以查看`esp32/boards`下面有很多的文件夹,其中,每一个文件夹都是一个板子的配置,我们可以照葫芦画瓢的修改,也可以新建一个。这里,我就以`ESP32_GENERIC_C3`来进行修改。其中,修改`mpconfigboard.h`中的`MICROPY_HW_BOARD_NAME`可以更改其名称
```c
#define MICROPY_HW_BOARD_NAME "Follow ME III"
#define MICROPY_HW_MCU_NAME "XIAO ESP32C3"
```
使用`make`来进行编译比使用`idf.py`编译更好
```bash
make BOARD=ESP32_GENERIC_C3
```
编译成功后即可通过其最后的一行来进行烧录
```bash
esptool.py -p /dev/ttyACM0 -b 460800 --before default_reset --after hard_reset --chip esp32c3 --no-stub write_flash --flash_mode dio --flash_size 4MB --flash_freq 80m 0x0 build-ESP32_GENERIC_C3/bootloader/bootloader.bin 0x8000 build-ESP32_GENERIC_C3/partition_table/partition-table.bin 0x10000 build-ESP32_GENERIC_C3/micropython.bin
```
3. ### 进行验证
使用`thonny`在REPL中运行`import blink`即可看到 LED 闪烁
### Follow Me: 3
[【得捷电子Follow me第3期】0. 开箱贴](http://bbs.eeworld.com.cn/thread-1264753-1-1.html)
[【得捷电子Follow me第3期】1. 任务1-编译自己的 Micropython 系统](#)
(未发布)【得捷电子Follow me第3期】2. 任务2-使用扩展板上的OLED屏幕显示文字和图形
(未发布)【得捷电子Follow me第3期】3. 任务3-播放任意一首音乐
### 得捷创意大赛
[【DigiKey“智造万物,快乐不停”创意大赛】 物料开箱](http://bbs.eeworld.com.cn/thread-1263186-1-1.html)
【DigiKey“智造万物,快乐不停”创意大赛】1. ADS1282 驱动的移植与实验
【DigiKey“智造万物,快乐不停”创意大赛】2. 系统功能的基本实现
[^1]:[GitHub - micropython/micropython](https://github.com/micropython/micropython)
[^2]: [Linux 和 macOS 平台工具链的标准设置](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/linux-macos-setup.html)
[^3]: [SEEED STUDIO EXPANSION BASE XIAO扩展板 - Wiki](https://wiki.seeedstudio.com/Seeeduino-XIAO-Expansion-Board/)
[^4]: [XIAO ESP32C3 MicroPython库](https://github.com/IcingTomato/micropython_xiao_esp32c3)
-
发表了主题帖:
【得捷电子Follow me第3期】0. 开箱贴
感谢DigiKey联合EEWORLD举办的[【Follow me 第3期!与得捷一起解锁开发板超能力】活动](http://www.eeworld.com.cn/huodong/digikey_follow_me/)提供的元器件,这次下单到到货的速度很快!
#### 订购清单
| 产品 | 订购数量 | 价格 |
| -------------------------------- | -------- | ------ |
| Seeed Studio XIAO ESP32C3 | 2 | 85.76 |
| SEEED STUDIO EXPANSION BASE XIAO | 1 | 136.12 |
| GROVE AHT20 I2C INDUSTRIAL TEMP | 1 | 53.12 |
| GROVE LIGHT SENSOR VER 1.2 | 1 | 26.56 |
| | 5 | 301.56 |
#### 照片
发现赠送的有天线,所以当时没买天线是明智之举。
#### Follow Me: 3
1. [【得捷电子Follow me第3期】0. 开箱贴](#)
2. (未发布)【得捷电子Follow me第3期】1. 任务1-编译自己的 Micropython 系统
3. (未发布)【得捷电子Follow me第3期】2. 任务2-使用扩展板上的OLED屏幕显示文字和图形
4. (未发布)【得捷电子Follow me第3期】3. 任务3-播放任意一首音乐
##### 得捷创意大赛
1. [【DigiKey“智造万物,快乐不停”创意大赛】 物料开箱](http://bbs.eeworld.com.cn/thread-1260793-1-1.html)
2. [【DigiKey“智造万物,快乐不停”创意大赛】1. ADS1282 驱动的移植与实验](http://bbs.eeworld.com.cn/thread-1263186-1-1.html)
3. 【DigiKey“智造万物,快乐不停”创意大赛】2. 系统功能的基本实现
- 2023-11-15
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】1. ADS1282 驱动的移植与实验
lugl4313820 发表于 2023-11-15 08:53
大佬这个领域大有前途呀,听说探石油也是用振动来实现的,楼主可以多普及一下这些知识。是不是有点象B超的 ...
差不多可以这样理解,毕竟地震的震动也是一种波,只是介质不同罢了
- 2023-11-14
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】1. ADS1282 驱动的移植与实验
wangerxian 发表于 2023-11-14 19:28
检波器大概是个什么样子的?
🤣刚刚还在处理一大堆的检波器,检波器和线圈式麦克风差不多,主要由线圈和磁铁构成。
微弱的震
动会引发线圈产生感应电动势,在adc上就能检测出微弱的电压。
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】1. ADS1282 驱动的移植与实验
lugl4313820 发表于 2023-11-14 15:30
大佬这个检测地震的原理的原理是怎么样的呀?摆着就行了吗?
这个地震是一个宽泛的概念,自然的板块活动会产生波形,我们平常走路、汽车的行驶、震源车的触发、爆炸都能产生地震波。
我目前在研究三维地震勘探,人为制造地震波在地壳反射,用这检波器接收微弱信号即可分析出地下结构。
你可以参考这个:三维地震勘探_百度百科 (baidu.com)
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】2 功能需求分析及基础功能实现
pd加热台超过200度铝基板电阻变大升温就非常慢了,不知道你有没有好的解决办法
-
上传了资料:
【DigiKey创意大赛】1. ADS1282 驱动的移植与实验-资料文件
-
发表了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】1. ADS1282 驱动的移植与实验
本帖最后由 ICS 于 2023-11-14 12:54 编辑
作品名称:基于ADS1282的三维地震勘探仪器的设计
> ADS1282 是用于地震监测和能源勘探且具有 PGA 的超高分辨率 4kSPS 2 通道 Δ-Σ ADC,具有32位分辨率、4kHz采样率、130dB动态范围的超高精度ADC。
>
> 为什么要移植`ADS1282`驱动到`Arduino`?
>
> Ti 官方提供的示例代码[^1]仅提供了`MSP432`的驱动代码,为了能在本项目的主控——`ESP32-S3`上运行,采用目前流行的嵌入式框架进行移植,Arduino有丰富的软件库和社区支持,可以方便地编写和调试代码,实现对ADS1282模块的控制和通信。
[TOC]
#### 硬件准备
本次实验选用得捷提供的`ESP32-S3- WROOM-1UN8R2 DEV BRD`与自制的`ADS 1282`测试板
#### 移植过程
##### 通讯引脚及其协议
SPI 通信模式为 MODE0,且是 MSBFIRST(参见数据手册 P25)。另外,需要特别注意的是 SPI CLK 频率不能大于 2M,笔者在第一次移植时就忽略了这个问题,导致找不到错误的原因。

其中连接到ESP32-S3- WROOM-1UN8R2 DEV BRD引脚的功能如下(参见数据手册P6)
| NAME | 功能 | 连接到 |
| ----- | ---------------------------- | ------ |
| SCLK | SPI时钟输入 | IO21 |
| DOUT | SPI数据输出 | IO13 |
| DIN | SPI数据输入 | IO12 |
| DRDY | 数据准备就绪输出,低电平有效 | IO14 |
| DONE | | IO10 |
| RESET | 复位输入,低电平有效 | IO47 |
我们将针脚按照以下的方式进行连接
##### 寄存器及指令
| 指令名 | 操作码 | 功能 |
| :-----: | :------------: | :----------------------------------------------------------- |
| NOP | 0x00 | 无操作,用于产生时钟或填充字节 |
| WAKEUP | 0x00 | 唤醒,用于退出待机模式 |
| STANDBY | 0x03 | 待机,用于进入待机模式 |
| SYNC | 0x05 | 同步,用于同步数据转换 |
| RESET | 0x07 | 复位,用于复位ADS1282 |
| RDATAC | 0x10 | 连续读数据,用于连续读取数据 |
| SDATAC | 0x11 | 停止读数据,用于停止连续读取数据 |
| RDATA | 0x12 | 读数据,用于读取一次数据 |
| RREG | 0x20 &ADDRESS | 读寄存器,用于读取一个或多个寄存器的值,需要指定寄存器的地址和数量 |
| WREG | 0x40 & ADDRESS | 写寄存器,用于写入一个或多个寄存器的值,需要指定寄存器的地址和数量,以及寄存器的值 |
| OFSCAL | 0x60 | 偏移校准 |
| GANCAL | 0x61 | 增益校准 |
| 寄存器名 | 地址 | 默认值 |
| :------: | :--: | :----: |
| ID | 0x00 | 0x00 |
| CONFIG0 | 0x01 | 0x52 |
| CONFIG1 | 0x02 | 0x08 |
| HPF0 | 0x03 | 0x32 |
| HPF1 | 0x04 | 0x03 |
| OFC0 | 0x05 | 0x00 |
| OFC1 | 0x06 | 0x00 |
| OFC2 | 0x07 | 0x00 |
| FSC0 | 0x08 | 0x00 |
| FSC1 | 0x09 | 0x00 |
| FSC2 | 0x0A | 0x40 |
表 1 来源于数据手册 P32,表 2 来源于数据手册 P35。
为了方便起见,我们需要统一数据收发的接口
```c++
/**
* @brief 通过SPI发送和接收数据。
*
* @param transmitBuffer 包含要发送数据的缓冲区。
* @param receiveBuffer 用于存储接收数据的缓冲区。
* @param byteLength 数据的字节长度。
* @return 如果操作成功,则返回true;否则返回false。
*/
bool spiSendReceive(const uint8_t transmitBuffer[], uint8_t receiveBuffer[], const uint8_t byteLength)
{
ADS1282_SPI->transferBytes(transmitBuffer, receiveBuffer, byteLength);
return true;
}
```
那么发送指令就是
```c++
/**
* @brief 发送命令给设备。
*
* @param op_code 要发送的操作码。
*/
void sendCommand(const uint8_t op_code)
{
uint8_t dataTx[1] = {op_code};
uint8_t dataRx[1] = {0};
// 发送命令
spiSendReceive(dataTx, dataRx, 1);
}
```
读写寄存器的代码如下
```c++
uint8_t readSingleRegister(const uint8_t address)
{
uint8_t dataTx[3];
uint8_t dataRx[3];
// 指令
dataTx[0] = OPCODE_RREG | (address | OPCODE_REG_ADDR_MASK);
dataTx[1] = 0x00;
spiSendReceive(dataTx, dataRx, 2);
// 读数据
dataTx[2] = OPCODE_NOP;
ets_delay_us(DELAY_T_DLY); // 等待数据返回
spiSendReceive(&dataTx[2], &dataRx[2], 1);
return registerMap[address];
}
/**
* @brief 使用给定的地址和数据写入单个寄存器。
* @param address 要写入的寄存器的地址。
* @param data 要写入寄存器的数据。
* @note 地址必须在可用寄存器的范围内。
*/
void writeSingleRegister(const uint8_t address, const uint8_t data)
{
uint8_t dataTx[3];
uint8_t dataRx[3];
// Send command
dataTx[0] = OPCODE_WREG | (address & OPCODE_REG_ADDR_MASK);
dataTx[1] = 0x00;
spiSendReceive(dataTx, dataRx, 2);
dataTx[2] = data;
spiSendReceive(&dataTx[2], &dataRx[2], 1);
}
```
##### 读取采集数据
读取采集的数据很简单,通过以下的代码就能获得采集数据,但由于ADC采集转换需要一定的时间,所以需要使用DRDY引脚来指示数据转换的完成。
```c++
/**
* @brief 读取数据。
*
* @return 读取到的数据。
*/
int32_t readData(void)
{
uint8_t dataTx[4] = {0};
uint8_t dataRx[4] = {0};
spiSendReceive(dataTx, dataRx, 4);
}
```
DRDY引脚是一种数据就绪信号,用于指示ADS1282是否有新的数据可供读取。ADS1282在每次完成一次数据转换后,会将DRDY引脚从高电平拉低至低电平,持续一个时钟周期,然后恢复为高电平。(参见数据手册P27)
主机可以通过检测DRDY引脚的状态,来确定是否可以发送读取数据的命令。ADS1282支持两种读取数据的模式,分别是连续读取数据模式(RDATAC)和单次读取数据模式(RDATA)。在连续读取数据模式下,主机只需发送一次RDATAC命令,就可以持续地从ADS1282读取数据,直到发送SDATAC命令或复位ADS1282为止。在单次读取数据模式下,主机每次需要读取数据时,都要发送一次RDATA命令,然后等待DRDY引脚变为低电平,再从ADS1282读取数据。我们可以使用中断来判断DRDY引脚的下拉,然后配合读取数据函数使用。
```c++
/**
* @brief 等待指定时间内的DRDY中断。
*
* @param timeout_ms 超时时间(毫秒)。
* @return 如果在超时时间内发生DRDY中断,则返回true;否则返回false。
*/
bool waitForDRDYinterrupt(const uint32_t timeout_ms)
{
if (!readContinuousMode)
sendCommand(OPCODE_RDATAC);
// 创建中断
attachInterrupt(digitalPinToInterrupt(ADS1282_DRDY), interruptHandler, FALLING);
// 等待中断
unsigned long startTime = millis();
do
{
// DO NOTHING
} while (millis() - startTime < timeout_ms && !ADCInterruptFlag);
// 取消中断
detachInterrupt(ADS1282_DRDY);
if (ADCInterruptFlag)
{
ADCInterruptFlag = false;
return true;
}
else
{
return false;
}
}
```
ADS1282的数据格式为32位的补码,其中最高位为符号位,其余31位为数值位。ADS1282的数据范围为-2^31到2^(31-1),对应的电压范围为-2.5V到2.5V,即每个LSB(最低有效位)的电压值为2.5V/2^31。转换的公式如下:
> 电压值 = 数据值 * 5V / 2^31
```c++
/**
* @brief 将原始ADC数据转换为电压值。
*
* @param data 要转换的原始ADC数据。
* @return 从原始数据计算得到的电压值。
*/
float convertToVoltage(int32_t data)
{
return (data * 5.0) / (0x7fffffff * 1.0f);
}
```
#### 测试
一个简单的测试代码如下
```c++
// ......
#include
// ADC引脚
// 时钟引脚
#define ADC_SCL 21
// DOUT 引脚
#define ADC_MISO 13
// DIN 引脚
#define ADC_MOSI 12
// CS 引脚 NOTE: 在 ads1282 上没有这个引脚
#define ADC_CS -1
// DRDY 引脚
#define ADC_DRDY 14
// RESET 引脚
#define ADC_RESET 47
// DONE 引脚
#define ADC_DONE 10
void main(){
Serial.begin(115200);
// ......
ADCStartup(ADC_SCL, ADC_MISO, ADC_MOSI, ADC_CS, ADC_DRDY, ADC_RESET);
/* ADC 采样率设置为 1000 */
writeRegisterBitsValue(CONFIG0_ADDRESS, CONFIG0_DR_MASK, CONFIG0_DR_1000SPS);
/* ADC 增益设置为 1 */
writeRegisterBitsValue(CONFIG1_ADDRESS, CONFIG1_PGA_MASK, CONFIG1_PGA_1);
}
void loop(){
// 等待中断
if (waitForDRDYinterrupt(10)){
// 输出数据
Serial.print(adc_data);
}
}
// ......
```
由于没有连接检波器,因此采集到的波形如下
#### 更多
1. [【DigiKey“智造万物,快乐不停”创意大赛】 物料开箱 - DigiKey得捷技术专区 - 电子工程世界-论坛 (eeworld.com.cn)](http://bbs.eeworld.com.cn/thread-1260793-1-1.html)
2. 【DigiKey“智造万物,快乐不停”创意大赛】1. ADS1282 驱动的移植与实验
3. (未发布)【DigiKey“智造万物,快乐不停”创意大赛】2. 系统功能的基本实现
4. (未发布)【DigiKey“智造万物,快乐不停”创意大赛】3. 打的板子的开箱及展示
5. (未完待续)
#### 源码下载
完整代码分享在:[【DigiKey创意大赛】1. ADS1282 驱动的移植与实验-资料文件](http://download.eeworld.com.cn/detail/ICS/629866)(无需下载分),顺手移植 ADS1282 到 Micropython 上,所以内含 Micropython ADS1282 驱动[^3]。
发现这里也能插入文件:
#### 参考资料
[^1]: [SBAC300 支持软件 | 德州仪器 TI.com.cn](https://www.ti.com.cn/tool/cn/download/SBAC300)
[^2]: [ADS1282数据手册 英文](https://www.ti.com.cn/cn/lit/ds/symlink/ads1282.pdf)
[^3]: [AntonVanke/MicroPython-Drivers: MicroPython 自用驱动库 (github.com)](https://github.com/AntonVanke/MicroPython-Drivers)
- 2023-10-27
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】 物料开箱
wangerxian 发表于 2023-10-26 19:24
还是挺期待ADS1282检波器模块,它能做什么检测?
主要用于地震信号检测
ADS1282 Datasheet
- 2023-10-25
-
发表了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】 物料开箱
# 【DigiKey“智造万物,快乐不停”创意大赛】 物料开箱
> 很高兴能参加本次【DigiKey“智造万物,快乐不停”创意大赛】,本人于 2023-10-7 在得捷上下单了此次比赛所使用的物料,昨日(2023-10-25) 取得物料并于今日撰写开箱贴
## 1. 物料合照

## 2. 物料作用
我的设想是设计一款基于ADS1282的三维地震勘探仪器,通过 ADS1282检波器模块 将采集到的地震数据发送到 ESP32S3 进行处理
1. ESP32 S3及其开发板
主控芯片,具有240MHz双核RISC-V处理器、320KB内存、43个GPIO引脚等性能,用于处理数据并通过WIFI,串口,SD卡等方式记录数据
2. REF5050
精密电压基准芯片,具有50ppm/°C温度系数、0.05%精度、5V输出电压等性能,为传感器提供精准的电压基准
3. ESP Prog
开发板调试工具,支持JTAG和UART接口,用于烧录程序和调试代码
## 3. 总结
物料非常不错,品质优良,功能强大。再次感谢`EEWorld`和`DigiKey`提供这么好的机会来实现我的创意。我相信我的作品能够展现出基于嵌入式CPU的边缘计算架构在地震勘探领域的应用价值和创新潜力。
## 4. 参考文档
1. [ESP32-S3 系列芯片 技术规格书](https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_cn.pdf "ESP32-S3 系列芯片 技术规格书")
2. [ESP-Prog](https://docs.espressif.com/projects/espressif-esp-dev-kits/zh_CN/latest/other/esp-prog/user_guide.html "ESP-Prog")
3. [REF50xx 低噪声、极低温漂、高精度电压基准](https://www.ti.com.cn/document-viewer/cn/REF5050/datasheet "REF50xx 低噪声、极低温漂、高精度电压基准")
- 2023-07-09
-
加入了学习《基于树莓派Pico W的简易网络天气时钟》,观看 视频演示