【ESP32学习总结】2·入门学习,vscode库安装,oled i2c通信,附代码

目录

1.GPIO输入输出

2.外部中断

3.串口通信

4.电压读取

5.PWM输出

6.I2C通信

7.OLED显示


1.GPIO输入输出

老宇哥带你玩转ESP32:03 GPIO数字输入与数字输出今天我们来点灯https://mp.weixin.qq.com/s/4DdkHJgiaGZlDHrqdCVHdA

#include <Arduino.h>

#define LED 22

void setup() {
  pinMode(LED,OUTPUT);
}

void loop() {
  digitalWrite(LED,0);
  delay(1000);
  digitalWrite(LED,1);
  delay(1000);
}

2.外部中断

#include <Arduino.h>

#define LED 22
#define KEY 13
int state=0;

void bt_callBack(void){
  state = digitalRead(KEY); // 读取按键状态
  digitalWrite(LED, state); // 把按键状态做为LED灯的输出
}

void setup() {
  pinMode(LED,OUTPUT);
  pinMode(KEY,INPUT);
  attachInterrupt(KEY, bt_callBack, CHANGE);
}

void loop() {
}

如果没有按键,可直接触摸引脚,也可以达到转换电平的效果。

3.串口通信

老宇哥带你玩转 ESP32:04 串口玩起来是真方便今天我们来玩儿串口https://mp.weixin.qq.com/s/YBX0WfhnhpT0-SQuaRmeDg

#include <Arduino.h>

#define LED 22
#define KEY 13

int rec_data;
void setup() {
Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    // rec_data = Serial.read();
    rec_data=Serial.parseInt();
    Serial.print("received: ");
    Serial.println(rec_data,DEC);
  }

}

读出代码Serial.read()只能读出字符,输出需要经过转换;而Serial.parseInt()可直接读出几位数的数字。

 

4.电压读取

老宇哥带你玩转 ESP32:04 ADC用起来这也太简单了吧今天我们来玩儿ADChttps://mp.weixin.qq.com/s/SmrYDSbCNxU0sZVsPDkf1g

 Serial.println("ADC value on Pin(%d) is %d!",analog_value);这里带了红线,编译也出错了,不知道原因,然后就改为下面的代码了,知道原因的可以评论区告诉一下,感激不尽。

#include <Arduino.h>

#define ADC_GPIO 13

int analog_value = 0;

void setup() {
Serial.begin(9600);

}

void loop() {
  analog_value = analogRead(ADC_GPIO);
  Serial.println(analog_value,DEC); 
  delay(1000);
}

5.PWM输出

老宇哥带你玩转 ESP32:06 输出你想要的PWM波形今天我们来玩儿PWMhttps://mp.weixin.qq.com/s/Bps6HYsSeyuxQAoKUZRh5A

#include <Arduino.h>

#define ADC_GPIO 13
#define LED 22
#define PWM1_Ch 0
#define PWM1_Res 10
#define PWM1_Freq 1000
int PWM1_DutyCycle=50;

int analog_value = 0;

void setup() {
  Serial.begin(9600);
  ledcAttachPin(LED, PWM1_Ch);
  ledcSetup(PWM1_Ch, PWM1_Freq, PWM1_Res);

}

void loop() {
   while(PWM1_DutyCycle < 1023)
  {
    ledcWrite(PWM1_Ch, PWM1_DutyCycle++);
    delay(2);
  }
  while(PWM1_DutyCycle > 0)
  {
    ledcWrite(PWM1_Ch, PWM1_DutyCycle--);
    delay(2);
  }
}

PWM1_Res为分辨率,分辨率越高,PWM1_Freq可实现的值越小;如当分辨率为9,频率可达100khz,当分辨率为11,频率只能达到39khz,这个是我的个人理解,如有错误,欢迎指出。

6.I2C通信

老宇哥带你玩转 ESP32:07 I2C协议,看这一篇就够了今天我们来玩儿I2C。https://mp.weixin.qq.com/s/occvhjfXL-45ulTjbOS0iw

由于我的开发板没有21引脚,固通过F12查找声明,找到i2c的通讯引脚底层代码,修改了引脚号。

修改软件串口通信波特率为115200。

 

#include <Arduino.h>
#include "Wire.h"

void setup(){
  Serial.begin(115200); 
  int I2CDevices = 0;
  byte address;
  Wire.begin();
  for (address = 1; address < 127; address++)
  {
    Wire.beginTransmission(address);
    if (Wire.endTransmission() == 0)
    {
      Serial.print("Found I2C Device: ");
      Serial.print(" (0x");
      if (address < 16)
      {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println(")");
      I2CDevices++;
    }
  }

  if (I2CDevices == 0)
  {
    Serial.println("没有发现I2C设备!\n");
  }
  else
  {   
    Serial.print("发现了");
    Serial.print(I2CDevices);
    Serial.println("个I2C设备!\n");  
  }  
}

void loop() {

}

7.OLED显示

老宇哥带你玩转 ESP32:07 I2C协议,看这一篇就够了今天我们来玩儿I2C。https://mp.weixin.qq.com/s/occvhjfXL-45ulTjbOS0iw

需要安装两个库,首先回到platformio主桌面,然后如图搜索下载,然后选择添加,第二个库也是一样,是不是很方便呢!!

 报错,缺少一个库Adafruit_I2CDevice.h,按照前面安装库的方法安装就行了,注意搜索“header:Adafruit_I2CDevice.h”才会搜到有文件。

 

不知道为什么出现了乱码,知道的麻烦告诉一下呗。

#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
int recData=0;
void setup() {
  Serial.begin(115200);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }  
  delay(1000);
  display.display();
  
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);

}
void loop() {
    if (Serial.available() > 0) 
    {
    recData = Serial.parseInt();
    Serial.print("received: ");
    Serial.println(recData,DEC);

    display.setCursor(0,0);
    display.print("CHIPHOME");
    display.display();
    display.setCursor(0,16);
    display.print("12345678");
    display.display();
    display.setCursor(0,32);
    display.print(recData,DEC);
    display.display();
     display.clearDisplay();
  }
}
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值