物联网-ESP8266
预备知识
微控制器的基本知识
16路物联网支付开关控制64个储物柜#跨阵物联 #扫码支付 #智能控制 #控制器
红色正极,黑色负极
正极常开(中间线不在的方向)端接第一列正极串联
负极常开接到第一行负极串联
最后,当要开第一行最后一个开关:一行二列通电到一行一列,形成回路
买uni板子:
蓝底白字为芯片引脚名称
要设置digitalWrite(D2,HIGH);
还是digitalWrite(4,HIGH);
作用相同,上面更加直接
ADC为A0,为模拟引脚,D开头是数字引脚。
GND为接地引脚(GROUND,0电压参考点)
Arduino开发基本操作
太极创客】零基础入门学用Arduino 第一部分 合辑
- AuduinoIDE下载
- 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//点平设置为低来熄灭LEDdigitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW//等待1秒delay(1000); // wait for a second
}
arduino官方帮助手册
太极帮助手册
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 connectionSerial.begin(9600);//configure pin 2 as an input and enable the internal pull-up resistorpinMode(2, INPUT_PULLUP);pinMode(13, OUTPUT);
}void loop() {//read the pushbutton value into a variableint sensorVal = digitalRead(2);//print out the value of the pushbuttonSerial.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) {//显示1digitalWrite(4, HIGH);digitalWrite(7, HIGH);} else if (myNumber == 2) {//显示2digitalWrite(3, HIGH);digitalWrite(4, HIGH);digitalWrite(5, HIGH);digitalWrite(8, HIGH);digitalWrite(9, HIGH);} else if (myNumber == 3) {//显示3digitalWrite(3, HIGH);digitalWrite(4, HIGH);digitalWrite(5, HIGH);digitalWrite(7, HIGH);digitalWrite(8, HIGH);} else if (myNumber == 4) {//显示4digitalWrite(6, HIGH);digitalWrite(5, HIGH);digitalWrite(4, HIGH);digitalWrite(7, HIGH);} else if (myNumber == 5) {//显示5digitalWrite(3, HIGH);digitalWrite(6, HIGH);digitalWrite(5, HIGH);digitalWrite(7, HIGH);digitalWrite(8, HIGH);} else if (myNumber == 6) {//显示6digitalWrite(3, HIGH);digitalWrite(4, HIGH);digitalWrite(5, HIGH);digitalWrite(7, HIGH);digitalWrite(8, HIGH);digitalWrite(9, HIGH);} else if (myNumber == 7) {//显示7digitalWrite(3, HIGH);digitalWrite(4, HIGH);digitalWrite(7, HIGH);} else if (myNumber == 8) {//显示8digitalWrite(3, HIGH);digitalWrite(4, HIGH);digitalWrite(5, HIGH);digitalWrite(6, HIGH);digitalWrite(7, HIGH);digitalWrite(8, HIGH);digitalWrite(9, HIGH);} else if (myNumber == 9) {//显示9digitalWrite(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号引脚为输出,点亮LEDSerial.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-255int brightness=map(analogInputVal,0,1023,0,255);analogWrite(9,brightness);
}
物联网
使用ESP8266-NodeMCU
物联网(IOT,Internet Of Things万物归于互联)