Arduino+esp32学习笔记

学习目标:

  • 使用Arduino配置好蓝牙或者wifi模块
  • 学习使用python配置好蓝牙或者wifi模块

学习内容(笔记):

一、 Arduino语法基础


Arduino语法是基于C++的语法,C++又是c基础上增加了面向对象思想等进阶语言。那就只记录没见过的。

  • 单多行注释 // 和 /**/
  • 变量(数字,字符串,布尔,对象)
  • 条件语句 if-else,switch
  • 循环语句 for while
  • 单多维数组 int arr[5]={1,2,3,4,5};
  • 函数 void
    Arduino+esp32学习笔记_第1张图片

01、pinMode:设置引脚的输入输出状态

pinMode(pin,Mode):
参数:
Pin:引脚号;
Mode:INPUT、OUTPUT

02、digitalWrite:设置输出引脚的高低电平状态

digitalWrite(pin,value)
参数:
Pin:引脚号 ;
value:HIGH LOW

03、digitalRead:读取引脚的状态,并返回HIGH 或LOW

int digitalRead(pin)
参数:
Pin:引脚号
返回值:
int:1/0

04、analogRead:读出模拟引脚上的电压,并以二进制数值返回(0-1023)对应为0~5v

int analogRead(pin)
参数:
Pin:引脚号
返回值:
二进制数值返回(0-1023)对应为0~5v

05、analogWrite:给PWM引脚输出电压值

analogWrite(pin,value)
参数:
pin:引脚号 ;
value:具体的pwm值,(0~255对应表示一个周期的高电平占空比)

06、shiftOut:将一个字节的数据通过移位的方式逐位的输出

shiftOut(dataPin,clockPin,bitOrder,value)
参数:
dataPin:数据引脚
clockPin:时钟引脚
bitOrder:移位顺序(MSBFIRST-高;LSBFIRST-低)
value:需要进行移位传输的值
说明:
在输出数据时,当一位数据写入数据输出引脚时,时钟引脚将输出脉冲信号,指示该位数据已被写入数据输出引脚等待外设读取。并且在使用本函数之前datapin和clockpin引脚应该设置为输出状态。本函数一次只能输出一个字节的内容,也就是说最大一次只能输出255,如果大于255,就要多次调用这个函数。

07、mills:回传单片机从开始执行到现在目前的时间(单位:ms)

unsigned long mills()
返回值:
unsigned long 单位:ms

08、delay:占用单片机的时间(即延时,单位:ms)

delay(number)
参数:
number:其代表占用单片机的时间长度

09、delay Microseconds:占用单片机的时间(单位:us)

delay Microseconds( number)
参数:
number:其代表占用单片机的时间

10、pulseIn:读取脉冲宽度。 从脉冲状态为state开始,到脉冲状态为~state为止。当然是由时间限制的

pulseIn(pin,state,timeout)
参数:
pin:模拟引脚号
state:读取脉冲的类型(高或者低)
timeout:等待脉冲读取完成的最长时间,如果参数中没有这一个,那么默认就是1min

11、map() 将数字从一个范围重新映射到另一个范围。

函数原型:
map(value, fromLow, fromHigh, toLow, toHigh)
value:要映射的数
fromLow:当前值范围的下限
fromHigh:当前值范围的下限
toLow:目标值范围的下限
toHigh:目标值范围的上限
返回值:映射后的值
eg: (读取IO0的模拟电压(01023),并将其设置到IO9(0255)(其实也就是PWM))
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);

12、串口相关

设置串口波特率:
Serial.begin(9600);

读取某IO口参数:
int buttonState = digitalRead(pushButton);

读取A0脚输入值大小(0-5V对应0~1023):
int sensorValue = analogRead(A0);

串口显示器输出:
Serial.println()

产生pwm信号:
analogWrite(pin, val)//val 是 0~255 的整数值,对应电压从 0 到+5V

二、 面包板和杜邦线(了解)


面包板用来快速搭接电路的工具;
优点:提高实验效率,减少实验故障发生率。
Arduino+esp32学习笔记_第2张图片
Arduino+esp32学习笔记_第3张图片

杜邦线用来连接元件,分为母母线,公母线,公公线(我目前没遇到过要使用公线的情况,所以买了一些母母线连接)

三、点亮LED测试板子


bug:
上传失败: 未提供上传端口

Arduino+esp32学习笔记_第4张图片
在这里插入图片描述
Arduino+esp32学习笔记_第5张图片
拿捏,粉色运行灯,蓝色是D2引脚的LED,板子上只有一个区,所以在代码中直接写整型即可。

//定义LED引脚
int LED_PIN=2;
void setup() {
  // 开发板通电或者复位后执行,通常用来初始化,只运行一次
  // 设定引脚为输出模式
  pinMode(LED_PIN,OUTPUT);
  // 点亮LED
  digitalWrite(LED_PIN,HIGH);
 
  
}

void loop() {
  // put your main code here, to run repeatedly:
  //一个死循环,不断的重复运行
}

Arduino+esp32学习笔记_第6张图片Arduino+esp32学习笔记_第7张图片

四、WiFi模块


Arduino已经集成了Wi-Fi模块,因此我们可以直接使用该模块。模块包含热点AP模式客户端STA模式
热点AP是指电脑或手机端直接连接ESP32发出的热点实现连接,如果电脑连接模块AP热点,这样电脑就不能上网,
因此在使用电脑端和模块进行网络通信时,一般情况下都是使用STA模式。也就是电脑和设备同时连接到相同网段的路由器上。
Arduino+esp32学习笔记_第8张图片
这里使用的是STA模式,在Arduino IDE中“文件 -> 示例(往下滑,找到Wifi。。。)”就可以找到示例代码,根据自己的晶振频率和wifi密码啥的就可以拿来用了。
Arduino+esp32学习笔记_第9张图片
没成功,别问我测试了多久,首先知道的有两个问题

  • 晶振频率一直无法确定到底是9600还是115200
  • AP模式是板子开热点,STA模式是手机或者路由器的热点
    然后手机开热点的时候无意间发现一个“选择AP频段”,我才恍然醒悟,好像这个频段会有啥避讳,搜索后才知道,设置好了2.4Ghz我再去试试。
    Arduino+esp32学习笔记_第10张图片
    点击运行后就会直接连接上我手机开的热点
    Arduino+esp32学习笔记_第11张图片

现在是可以了,我崽尝试一下不同的波特率是不是可以随意设置,只要收发波特率相同就可以接受(默认是115200,教程中是9600,我再试试其他的),功能是可以实现的。然后打印出来的
Arduino+esp32学习笔记_第12张图片
Arduino+esp32学习笔记_第13张图片

问题归纳

- 晶振频率一直无法确定到底是9600还是115200
- AP模式是板子开热点,STA模式是手机或者路由器的热点
然后手机开热点的时候无意间发现一个“选择AP频段”,我才恍然醒悟,好像这个频段会有啥避讳,搜索后才知道,设置好了2.4Ghz我再去试试。

对于以上问题,只能说串口波特率的自适应(我以为是esp特有的波特率,我还在网上找资料来着,所以导致我以为这是每块板子都拥有唯一的波特率),现在测试的是STA模式,也是最常用的模式,AP模式的解释好像就是说用板子开热点,板子又没得网络,所以不常用。最后确实只支持2.4GHZ下连接,手机热点如果是5GHZ就搜不到(即使电脑连接上了也没用)。


代码如下,参考示例下的wifi模块代码

#include 
//定义wifi名和密码
const char* ssid="wifi名称";
const char* password="88888888"; 



void setup()
{
    Serial.begin(4800);
    while(!Serial){delay(100);}

    // We start by connecting to a WiFi network

    Serial.println();
    Serial.println("******************************************************");
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}
void loop() {
  // put your main code here, to run repeatedly:

}


在STA模式的基础上将原本串口助手测试的写法,用板载LED来显示,实现只要通电就可以独立使用。
经过测试(用手机充电器插头插上之后,用手机先给板子拉黑名单,测试是否一闪一闪,然后再拉回来测试是否可以自动连接(亮15秒即已经连接))

你可能感兴趣的:(板子,学习,笔记)