Arduino初学者-控制继电器(串口 or NodeMCU)

串口控制继电器开关

参考:
官方例程
官方函数
csdn用户写的继电器模块的使用

串口指令:

//以下函数可配合串口使用: Serial.XX()
if(Serial)
available()
availableForWrite()
begin()
end()
find()
findUntil()
flush()
parseFloat()
parseInt()
peek()
print()
println() //Serial.println(val, format) val即数值,format是格式,可选HEX、OCT等
read()  
readBytes()
readBytesUntil()
readString()
readStringUntil()
setTimeout()
write()
serialEvent()

Relay Model (继电器)

Arduino初学者-控制继电器(串口 or NodeMCU)_第1张图片
它可以长上面这样。
Arduino初学者-控制继电器(串口 or NodeMCU)_第2张图片

但是,为了方便使用,我们买继电器模块时,通常买到上面这种。上面的是一路继电器。

  • 在左边有三个引脚:一个是输入VCC、一个接地GCC、一个为信号IN。
  • 右边有三个引脚:NC常闭端(normal close),COM公共端,NO常开端(normal open)
  • IN高电平时,常闭端与公共端连接;IN为低电平时NO-COM相连。
  • 需要注意的是,继电器不会给左边的引脚供电,继电器IN引脚给高低电平只是在决定将开关吸到哪边(利用电磁效应)。因此,为了达到继电器断开/闭合的效果,我们需要将左边的NC-COM或NO-COM串入一个带电源的主要的回路中。

例1:用串口写入C/O控制继电器关断/打开小灯

  • 思路:选用Pin8传输信号给继电器IN口;打开串口监视器读入我们输入的符号。

  • 电路:先建立一个简单的电源-电阻-Led电路;之后将继电器的NC、COM串入其中。
    Arduino初学者-控制继电器(串口 or NodeMCU)_第3张图片

  • 程序如下:

    int relayPin = 8;
    char incomingByte = 'O';
    
    void setup() {
      // put your setup code here, to run once:
      pinMode(relayPin,OUTPUT); //设8脚为输出、连着继电器的IN
      Serial.begin(9600);
    }
    
    void loop() {
      if (Serial.available() > 0) {
        // read the incoming byte:
        incomingByte = Serial.read();
        if(incomingByte == 'C'){ //串口输入C时 NC、COM相连
           digitalWrite(relayPin, HIGH);
           Serial.println(incomingByte);
          }
        if(incomingByte == 'O'){
           digitalWrite(relayPin, LOW);
           Serial.println(incomingByte);
          }
        }
    }
    

例2:使用Node MCU代替Arduino

  • 最理想的状态是用Node MCU的wifi功能控制继电器关断/打开,但在这之前不妨测试一下Node MCU
    用Node MCU串口实现继电器的控制
    1. 接线,与Arduino一样,以D8作为控制信号IN的引脚。Arduino初学者-控制继电器(串口 or NodeMCU)_第4张图片

    2. 代码修改两处:第一:初始化中relayPin引脚需要改成int relayPin = 15;int relayPin=D8这是因为ESP8266的引脚映射不同于接口(IO),如下图:Arduino初学者-控制继电器(串口 or NodeMCU)_第5张图片
      3.代码修改,第二:Serial.begin();的传入值改为115200,同时,打开的串口监视器的波特率也要选择这个值。(ps:我这块Node MCU背面明明写着use 9600bps baud rate,可是用9600就乱码,不知道这是为啥。回复:串口传输与AT指令的波特率要求不同 )

例3:用NodeMCU的服务端控制小灯亮灭

  • 接线不变。但是改用Web控制D8引脚
  • NodeMCU相关指令见Arduino初学者-NodeMCU
  • (更新:NodeMCU打开串口前都别用D8引脚!可能会使WiFi连接不上,或者串口乱码。)
#include 
#include 

ESP8266WebServer controlpage(80);
const char* ssid = "Xiaomi_DE92";
const char* password = "yz6689440"; //这是我家wifi啦,欢迎连接
int relayPin = 15;
void setup(){
  Serial.begin(9600);
  pinMode(relayPin, OUTPUT);
  WiFi.begin(ssid,password);
  Serial.print("Connecting to ");
  Serial.print(ssid);  
  Serial.println("...");
  
  while(WiFi.status() != WL_CONNECTED){ //当ESP8266与路由器连上时会返回WL_CONNECTED
    delay(500);}
  Serial.println("Conection established");
  Serial.print("IP address:  ");  
  Serial.println(WiFi.localIP()); //显示IP地址,可以用来在浏览器访问

  controlpage.begin();
  controlpage.on("/",HTTP_GET,handleRoot); //若用GET的方式打开首页,则执行子程序
  controlpage.on("/Relay",HTTP_POST,handleRelay);
  controlpage.onNotFound(handleNotFound);
  
  Serial.println("HTTP controlpage started");
}

void loop(){
  controlpage.handleClient(); //不断检查http的访问
}
void handleRoot(){
  controlpage.send(200,"text/html","
"); } void handleRelay(){ digitalWrite(relayPin,!digitalRead(relayPin)); controlpage.sendHeader("Location","/"); //修改头文件中的键值对内容,套娃的关键 controlpage.send(303); //页面跳转代码:303 } void handleNotFound(){ controlpage.send(404,"text/plain","404:Not found"); }

你可能感兴趣的:(arduino学习,arduino)