预备知识
微控制器的基本知识
16路物联网支付开关控制64个储物柜#跨阵物联 #扫码支付 #智能控制 #控制器
红色正极,黑色负极
正极常开(中间线不在的方向)端接第一列正极串联
负极常开接到第一行负极串联
最后,当要开第一行最后一个开关:一行二列通电到一行一列,形成回路
买uni板子:
蓝底白字为芯片引脚名称
要设置digitalWrite(D2,HIGH);
还是digitalWrite(4,HIGH);
作用相同,上面更加直接
ADC为A0,为模拟引脚,D开头是数字引脚。
GND为接地引脚(GROUND,0电压参考点)
红底白字GND接地,3V3为为外界提供3.3V电压,Vin为输入电 压
(给NodeMCU供电),两种给开发板供电,一种是线,另一种就是Vin
nodeMCU电压3.3V,所以D2引脚所能连接的电压不能超过3.3V
模拟引脚为0-1V之间,不能超过1V,不然会造成永久伤害。
浅蓝背景黑色文字:通讯类型
引脚,常见为串口通讯。U0TXD和U0RXD,TX为发送,RX为接收数据
U1TXD和U1RXD,TX为发送,RX为接收数据,可以和其他开发板通讯。电压不同需要电平转换板或其他方式变成能接收的3.3V电压
黑底白字:内存存储单元
操作端口,6-7-11-8-9-10不能使用。
灰底白字很少用,不用看。
看个按钮,RST为reset按钮复位键。FLASH为刷固件按钮。
Arduino开发基本操作
- AuduinoIDE下载
- 电压为5V
- USB连接在电脑,另一端连在开发板,然后打开Arduino IDE软件
- 选择开发板和端口
// 反复打开关闭灯(中间间隔1s)
void setup() {
// initialize digital pin LED_BUILTIN as an output.
//初始化
//LED_BUTTON数字引脚未输出模式
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
// 点亮LED并等待1秒
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
//点平设置为低来熄灭LED
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
//等待1秒
delay(1000); // wait for a second
}
void setup() {
// put your setup code here, to run once:
pinMode(ledPin,OUTPUT);
}
let ledPin=13; //Arduino Uno引脚13有LED
void loop() {
digitalWrite(ledPin,HIGH);
delayMicroseconds(10000); //等待10000微妙
digitalWrite(ledPin,LOW);
delayMicroseconds(10000);
}
pinMode
为xxx引脚设置为xxx模式
为13引脚设置输出模式:pinMode(13,OUTPUT)
LET_BUILTIN为常量引脚编号13,根据板的型号自动调整
设置为输出模式之后才能digitalWrite
(灯开关,HIGH有电流,LOW无电流)。
LED
长的一端正极,短的一端为负极
I=20mA,工作时,产生2伏特左右的电压降
电阻
两个引脚,中间是小电阻,用于保护短路,防止短路,一个小长方形
digitalWrite
HIGH为5V高电平
LOW为0V低电平
点亮一个LED
LED的电压为2V,所以正极为2V,Arduino引脚为5V,所以电阻为3V。
LED工作电流20mA,因为电阻为3V,所以电阻为U/I=R=3V/20mA=150Ω
电阻一般为200Ω或100Ω,可以用200,流过LED的电流安全,不能用100,会发热,能大不能小,确保LED寿命和稳定性
面包板
同一组的同一列相通
最边上两组是同一行相通,是供电用的
INPUT
引脚为高阻抗状态(100兆欧),用于读取传感器信号或开关信号:相连不同侧,同侧不相连
开关信号(数字信号),按下0,松开1
开关没有按下:走上面,没有引脚二到接地的线。上拉电阻(10K欧姆)防止短路(HIGH)
开关按下:走下面,因为上面电阻(上拉电阻(10K欧姆))(LOW)
引脚悬空:设置INPUT后没有外接电器,数字随机的
DigitalReadSerial
读取引脚数字输入,并将结果显示在串口监视器
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;
// the setup routine runs once when you press reset:
void setup() {
// 初始化串口通讯,每秒9600位,和软件窗口监视器波特率一致
Serial.begin(9600);
// 将pushbutton引脚设置为输入
pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// 读取引脚状态
int buttonState = digitalRead(pushButton);
// 打印按钮状态
Serial.println(buttonState);
delay(1); // 延时1毫秒,让程序更加稳定运行
}
INPUT_PULLUP
输入上拉模式,Arduino自带内部上拉电阻,可以如需外界电阻
void setup() {
//start serial connection
Serial.begin(9600);
//configure pin 2 as an input and enable the internal pull-up resistor
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop() {
//read the pushbutton value into a variable
int sensorVal = digitalRead(2);
//print out the value of the pushbutton
Serial.println(sensorVal);
// Keep in mind the pull-up means the pushbutton's logic is inverted. It goes
// HIGH when it's open, and LOW when it's pressed. Turn on pin 13 when the
// 根据读取道德开光状态设置LED的高低电平
if (sensorVal == HIGH) {
digitalWrite(13, LOW); //熄灭
} else {
digitalWrite(13, HIGH); //点亮
}
}
模拟电路
搭建电路图:
需要10根线,10根面包板跳线,数码管,开关,一个200-500欧姆电阻,一个Uno R3开发板
1位8段共阴极LED数码管(共阴代表所有负极接在一起)
中间是CC引脚,阴极
CC通过电阻到了接地上(电阻位200-500Ω)
数字展示结果:
void setup() {
pinMode(2,INPUT_PULLUP);
Serial.begin(9600);
int pinNumber = 3;
while (pinNumber <= 9) {
pinMode(pinNumber, OUTPUT);
pinNumber = pinNumber + 1;
}
//RandomSeed产生随机种子,seedVal位随机种子数值,A0为模拟输入数值
randomSeed(analogRead(A0));
}
void loop() {
int myNumber;
if(!digitalRead(2)){
myNumber = random(1, 10);
}
Serial.print("randomNumber:");
Serial.println(myNumber);
displayNumber(myNumber);
delay(500);
displayClear();
delay(500);
}
//自定义
void displayClear() {
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
void displayNumber(int myNumber) {
if (myNumber == 1) {
//显示1
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
} else if (myNumber == 2) {
//显示2
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
} else if (myNumber == 3) {
//显示3
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
} else if (myNumber == 4) {
//显示4
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
} else if (myNumber == 5) {
//显示5
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
} else if (myNumber == 6) {
//显示6
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
} else if (myNumber == 7) {
//显示7
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
} else if (myNumber == 8) {
//显示8
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
} else if (myNumber == 9) {
//显示9
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
}
}
模拟输入输出
调节亮度:带小曲线的引脚(0-255亮度值)
analogWrite(ledPin引脚,brightness亮度级别); 控制亮度
左边按钮变大,右边按钮变小
每次analogWrite的时候会给该引脚一个固定频率的PWM信号,只有3-5-6-9-10-11支持analogWrite函数,5好和6好引脚的PWM频率为980赫兹。
再analogWrite之前,不需要pinMode设置引脚,设置也没事
boolean pushButton1; //存储开关1的电平
boolean pushButton2; //存储开关2的电平
int ledPin=9; //LED引脚号
int brightness=128;//LED亮度参数
void setup() {
// put your setup code here, to run once:
//引脚2和8设置为上拉模式
pinMode(2,INPUT_PULLUP);
pinMode(8,INPUT_PULLUP);
//LED为输出模式
pinMode(ledPin,OUTPUT);
//启动串口通讯
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
pushButton1=digitalRead(2);//读取引脚2状态
pushButton2=digitalRead(8);//读取引脚8状态
//如果按下按钮开关1 并且亮度大于1,就降低亮度
if(!pushButton1 && brightness>0){
brightness--;
}
//如果按钮按钮开关2,并且亮度小于255,就增加亮度
else if(!pushButton2 && brightness <255){
brightness++;
}
//设置led亮度
analogWrite(ledPin,brightness);
Serial.println(brightness); //打印亮度
delay(10);
}
PWM
数字信号:
当间隔为1毫秒,就看起来是50%亮度
analogWrite(ledPin,127);127就是255*0.5
亮度长,灭的短,就75%亮度,变亮
analogWrite(ledPin,191);191=255*0.75
呼吸灯效果
void setup() {
// put your setup code here, to run once:
pinMode(9,OUTPUT); //9号引脚为输出,点亮LED
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
//控制LED由暗到明
for(int brightness=0;brightness<=255;brightness++){
analogWrite(9,brightness);
Serial.println(brightness);
delay(10);
}
for(int brightness=255;beightness>=0;beightness--){
analogWrite(9,brightness);
Serial.println(brightness);
delay(10);
}
}
电位器
样子:
可以看成两个电阻串联,旋钮会导致电阻同时发生变化
旋转到中间:1-2为500,2-3为500,一共1000欧姆
左旋:1-2减少,2–3增大,到尽头,1-2为0,2-3为1000Ω
右旋:2-3减少,1-2增大,到尽头,1-2为1000,2-3为0Ω
旋钮向哪转,哪边电阻减。
一般用于分压电路,电流=电压/电阻
R1-2为500,R2-3为500,如果U1为5V,那么U2为2.5V,U3为0V
R1-2为800,R2-3为200,如果U1为5V,那么U2为1V,U3为0V
1号为接地引脚,2号模拟输入引脚,3号引脚为5V引脚
练习图:
中间引脚节点模拟电路A0引脚上
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
//从模拟输入引脚读取数值0-1023,将0-5V电压输入信号映射到数值0-1023,空引脚数值是不固定的随机的
int analogInPutVal=analogRead(A0);
Serial.println(analogInPutVal)
}
电位器控制灯
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(9,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int analogInputVal=analogRead(A0);
//将0-1025等比映射到0-255
int brightness=map(analogInputVal,0,1023,0,255);
analogWrite(9,brightness);
}
物联网
使用ESP8266-NodeMCU
物联网(IOT,Internet Of Things万物归于互联)
- 问题1:安装ESP8266适配的驱动器(板子后面有,看到型号后直接百度或者github下载即可(官网下载地址)
下图COM5就是开发板端口
-问题2:开发板管理器下载失败:离线下载教程