物联网-ESP8266

预备知识

微控制器的基本知识

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开发基本操作

太极创客】零基础入门学用Arduino 第一部分 合辑

  • AuduinoIDE下载
  • 电压为5V
  • USB连接在电脑,另一端连在开发板,然后打开Arduino IDE软件
  • 选择开发板和端口

c 复制代码
// 反复打开关闭灯(中间间隔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
}

arduino官方帮助手册

太极帮助手册

c 复制代码
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

读取引脚数字输入,并将结果显示在串口监视器

c 复制代码
// 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自带内部上拉电阻,可以如需外界电阻

c 复制代码
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Ω)

数字展示结果:

c 复制代码
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设置引脚,设置也没事

c 复制代码
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

呼吸灯效果

c 复制代码
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引脚上

c 复制代码
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)
}

电位器控制灯

c 复制代码
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:开发板管理器下载失败:离线下载教程

教程(网址

互联网基础

相关推荐
董技叔软件开发公司7 小时前
物联网应用开发技术趋势与实践指南
物联网·物联网开发·物联网系统开发
TDengine (老段)13 小时前
TDengine 集群部署及启动、扩容、缩容常见问题与解决方案
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
熬夜的猪仔15 小时前
【Freertos实战】零基础制作基于stm32的物联网温湿度检测(教程非常简易)持续更新中.........
stm32·嵌入式硬件·物联网
网易独家音乐人Mike Zhou1 天前
【Linux应用】开发板USB共享网络,网线或USB以太网共享网络(局域网连接PC和开发板,实现PC给开发板共享网络,USB通过NDIS驱动共享)
linux·网络·单片机·mcu·物联网·嵌入式·iot
涛思数据(TDengine)1 天前
时序数据库 TDengine × SSRS:专为工业、能源场景打造的报表解决方案
大数据·数据库·物联网·时序数据库·tdengine
TESmart碲视1 天前
USB一线连多屏?Display Link技术深度解析
stm32·单片机·嵌入式硬件·物联网·计算机外设·电脑·智能硬件
时序数据说2 天前
时序数据库的存储之道:从数据特性看技术要点
大数据·数据库·物联网·开源·时序数据库·iotdb
行之无边2 天前
零基础入门物联网-远程门禁开关:硬件介绍
物联网
TDengine (老段)2 天前
TDengine 数据库建模最佳实践
大数据·数据库·物联网·时序数据库·tdengine·涛思数据