EasyShield&ESP32-WROOM-32开发

管脚连接详情

DHT11:G0-D4

ADCPWM:G35-A0,G32-D12

DACMUSIC:D5-G25

PHOTOCELL:G35-A1,G13-D13

G为ESP32-WROOM-32上的管脚,D为EasyShield上的数字管脚,A为EasyShield上的模拟管脚。四个项目均有一个数字管脚,而PWM调光和感光均有一个A管脚,是为了模拟信号输入。

DHT11温湿度传感器:通过DHT11获得环境温湿度

当返回值为0时默认成功,返回值为1时判断为初始化超时错误,返回值为2判断为校验错误;
溢出次数设定为100,超过此值则超时;delay()是ms级延时函数,delayMicroseconds()是us级延时函数;

#define DHT11 0 //控制 DHT11 的 IO 编号,此处为:GPIO0
uint8_t dht11Read(uint8_t *temp, uint8_t *humi);
void setup()
{
    Serial.begin(115200);    // 初始化串口
}
void loop()
{
    // 5s 间隔读取温湿度,并通过串口输出
    uint8_t temperature, humidity;
    if (!dht11Read(&temperature, &humidity))
        Serial.printf("The temp:%d,The humi:%d\r\n", temperature, humidity);
    else
        Serial.println("Error");
    delay(5000);
}
uint8_t ICACHE_FLASH_ATTR dht11_init(void)
{
    uint8_t errcode = 0;
    uint8_t i = 0;
    pinMode(DHT11, OUTPUT);    //设置 IO 输出
    digitalWrite(DHT11, HIGH); // IO 输出 1
    delay(2);                    //延时 2ms,为下降沿做准备
    digitalWrite(DHT11, LOW);  // IO 输出 0,产生下降沿
    delay(20);                   //延时 20ms,主机下降沿并保持,18ms 以上的低电平启动 DHT11
    digitalWrite(DHT11, HIGH); //再次拉高 IO,等待 DHT11 拉低以作应答
    pinMode(DHT11, INPUT);     //设置 IO 输入
    delayMicroseconds(40);       //延时 40us,等待 DHT11 输入的低电平应答信号
    //等待 DHT11 拉低 IO,最高持续 100 个 us
    while (digitalRead(DHT11) == 1 && i < 100)
    {
        i++;
        delayMicroseconds(1);
    }
    if (i >= 100)
    {
        errcode = 1;
        return errcode;
    }
    else
        i = 0;
    // DHT11 拉低 IO 持续 80us,后会在拉高 IO 持续 80us 作为完整的应答
    while (digitalRead(DHT11) == 0 && i < 100)
    {
        i++;
        delayMicroseconds(1);
    }
    if (i >= 100)
    {
        errcode = 1;
        return errcode;
    }
    return errcode;
}
uint8_t dht11_readBit(void)
{
    uint8_t i = 0;
    //等待 IO 变低
    while (digitalRead(DHT11) == 1 && i < 100)
    {
        i++;
        delayMicroseconds(1);
    }
    i = 0;
    //等待 IO 变高——先低再高表示开始传输一个 bit
    while (digitalRead(DHT11) == 0 && i < 100)
    {
        i++;
        delayMicroseconds(1);
    }
    delayMicroseconds(40); //等待 40us(0 bit)
    if (digitalRead(DHT11) == 1)
        return 1;
    else
        return 0;
}
uint8_t dht11_readByte(void)
{
    uint8_t i = 0;
    uint8_t data = 0;
    for (i = 0; i < 8; i++)
    {
        data <<= 1;
        data |= dht11_readBit();
    }
    return data;
}
uint8_t dht11Read(uint8_t *temp, uint8_t *humi)
{
    uint8_t buf[5];
    uint8_t i;
    if (!dht11_init())
    {
        for (i = 0; i < 5; i++)
            buf[i] = dht11_readByte();
        if ((buf[0] + buf[1] + buf[2] + buf[3]) == buf[4])
        {
            *humi = buf[0];
            *temp = buf[2];
        }
        else
            return 2;
    }
    else
        return 1;
    return 0;
}

串口输出效果。

ADCPWM旋转电位器:通过可旋转270°电位器控制LED灯珠的PWM调光

#define LED 32 // GPIO32 控制 LED
#define Ain 35 // GPIO35 模拟输入
int i = 0;
void setup()
{
    Serial.begin(115200);
    ledcSetup(8, 5000, 10); //设置 LEDC 通道 8 频率为 5000,分辨率为 10 位
    ledcAttachPin(LED, 8);  //设置 LEDC 通道 8 在 IO32 上输出
}
void loop()
{
    int n = analogRead(Ain); //读取 Ain 模拟口的数值(0-3.3V 对应 0-4095 取值)
    ledcWrite(8, n / 4);     // PWM 输出,占空比有效值 0~1023
    delay(1);
    i++;
    if (i >= 1000)
    {
        Serial.println(n);
        i = 0;
    }
}

DACMUSIC无源蜂鸣器:通过编写程序实现蜂鸣器播放音乐

调用的music.c文件需自行编写,由于占据篇幅过大不单独提供。

#include "Speaker.h"
#include "music_8bit.h"
SPEAKER Speaker;
void setup() {
   Speaker.begin();
   Speaker.setVolume(10);
   Speaker.playMusic(data, 22500);  
}
void loop() {
   Speaker.update();
}
#include "Speaker.h"
SPEAKER::SPEAKER(void) {
    _volume = 8;
}
void SPEAKER::begin() {
    ledcSetup(TONE_PIN_CHANNEL, 0, 13);
    ledcAttachPin(SPEAKER_PIN, TONE_PIN_CHANNEL);
    // digitalWrite(SPEAKER_PIN, 0);
    setBeep(1000, 100);
}
void SPEAKER::tone(uint16_t frequency) {
    ledcWriteTone(TONE_PIN_CHANNEL, frequency);
}
void SPEAKER::tone(uint16_t frequency, uint32_t duration) {
    tone(frequency);
    _count = millis() + duration;
    speaker_on = 1;
}
void SPEAKER::beep() {
    tone(_beep_freq, _beep_duration);
}
void SPEAKER::setBeep(uint16_t frequency, uint16_t duration) {
    _beep_freq = frequency;
    _beep_duration = duration;
}
void SPEAKER::setVolume(uint8_t volume) {
    _volume = 11 - volume;
}
void SPEAKER::mute() {
    ledcWriteTone(TONE_PIN_CHANNEL, 0);
    digitalWrite(SPEAKER_PIN, 0);
}
void SPEAKER::update() {
    if(speaker_on) {
        if(millis() > _count) {
            speaker_on = 0;
            mute();
        }
    }
}
void SPEAKER::write(uint8_t value) {
    dacWrite(SPEAKER_PIN, value);
}
void SPEAKER::playMusic(const uint8_t* music_data, uint16_t sample_rate) {
    uint32_t length =strlen ((char *)music_data);
    uint16_t delay_interval = ((uint32_t)1000000/sample_rate);
    if(_volume != 11) {
        for(int i=0; i<length; i++) {
            dacWrite(SPEAKER_PIN, music_data[i]/_volume);
            delayMicroseconds(delay_interval);
        }
        for(int t=music_data[length-1]/_volume; t>=0; t--) {
            dacWrite(SPEAKER_PIN, t);
            delay(2);
        }
    }
}
#include "Arduino.h"
#include "esp32-hal-dac.h"
#define SPEAKER_PIN         25
#define TONE_PIN_CHANNEL    0
class SPEAKER {
public:
    SPEAKER(void);
    void begin();
    void mute();
    void tone(uint16_t frequency);
    void tone(uint16_t frequency, uint32_t duration);
    void beep();
    void setBeep(uint16_t frequency, uint16_t duration);
    void update();
    void write(uint8_t value);
    void setVolume(uint8_t volume);
    void playMusic(const uint8_t* music_data, uint16_t sample_rate);
private:
    uint32_t _count;
    uint8_t _volume;
    uint16_t _beep_duration;
    uint16_t _beep_freq;
    bool speaker_on;
};
#ifndef _music_8bit_H_
#define _music_8bit_H_
#ifdef __cplusplus
extern "C" {
#endif
extern const unsigned char data[];
#ifdef __cplusplus
}
#endif
#endif

PHOTOCELL亮度传感器:通过改变环境光照亮度实现LED灯珠的亮灭

#define LED 32 // GPIO32 控制 LED
#define Ain 35 // GPIO35 模拟输入
int i = 0;
void setup()
{
    Serial.begin(115200);
    pinMode(LED, OUTPUT);
}
void loop()
{
    int n = analogRead(Ain); //读取 Ain 模拟口的数值(0-3.3V 对应 0-4095 取值)
    //光敏电阻接 GND
    if (n < 2048)
        digitalWrite(LED, HIGH); //若电压值下降表示有光,熄灭 LED
    else
        digitalWrite(LED, LOW); //若电压值上升表示无光,电路 LED
    delay(1);
    i++;
    if (i >= 1000)
    {
        Serial.println(n);
        i = 0;
    }
}

多功能实验扩展板_免费高速下载|百度网盘-分享无限制 (baidu.com)icon-default.png?t=N2N8https://pan.baidu.com/s/1mqiDeeu_dbd98ByuJBkPvw#list/path=%2FEasyShield的readme文件和相关资料,提取码:w2ho

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了搭建 ESP32-WROOM-32 的开发环境,你需要进行以下步骤: 1. 下载并安装 Arduino IDE:在 Arduino 官方网站上下载适用于你的操作系统的 Arduino IDE,并按照说明进行安装。 2. 安装 ESP32 开发板支持:打开 Arduino IDE,点击菜单栏中的 "文件" -> "首选项"。在 "首选项" 窗口中找到 "附加开发板管理器网址" 一栏,并添加以下链接: `https://dl.espressif.com/dl/package_esp32_index.json` 然后点击 "确定" 关闭 "首选项" 窗口。 3. 安装 ESP32 开发板:点击菜单栏中的 "工具" -> "开发板" -> "开发板管理器"。在 "开发板管理器" 窗口中,搜索 "esp32" 并选择 "esp32 by Espressif Systems"。点击 "安装" 按钮,等待安装完成。 4. 配置开发板:选择 "工具" -> "开发板",确保选择了正确的 ESP32 开发板(例如 "ESP32 Dev Module")。然后选择正确的端口,该端口应该是你的 ESP32-WROOM-32 连接到计算机时所显示的端口。 5. 测试开发环境:现在你可以尝试上传一个简单的示例程序到 ESP32-WROOM-32 来测试你的开发环境是否正常工作。选择 "文件" -> "示例" -> "ESP32" -> "Blink"。这将打开一个简单的示例程序,该程序会使 ESP32-WROOM-32 上的内置 LED 闪烁。点击 "上传" 按钮,等待上传完成。 如果一切顺利,你将看到 Arduino IDE 输出上传过程的信息,并在上传完成后,ESP32-WROOM-32 上的 LED 开始闪烁。这表明你已经成功搭建了 ESP32-WROOM-32 的开发环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值