基于ESP32的MQTT远程喂狗器

 材料

  1. esp32开发板*1
  2. 步进电机
  3. 电源
  4. 无源蜂鸣器(可替换成有源,程序要修改)
TB2lOOpn80kpuFjSsziXXa.oVXa_!!90831948
TB2bCPJi8DH8KJjy1zeXXXjepXa_!!143076481

控制原理

基于趣讨教MQTT控制平台,MQTT订阅话题为:用户id/自定义加密字符串/

可通过MQTT Dash安卓软件进行订阅,画面如下:

ESP32接收MQTT的报文信息,报文内容为:步进数-wg

通过程序解析报文,步进电机转相应的步数,带动连接步进电机上的狗粮容器,倾倒到地上,实现远程喂狗。

 

也增加了蜂鸣器,当接收到喂狗指令,开始喂狗的时候,蜂鸣器发出报警,召唤狗子。

程序

       
设备: 添加
平台:
/*
*趣讨教创客网:https://www.qutaojiao.com
*一个有趣好玩的网站
*/

#include "AccelStepper.h"

const int motorPin1 = 19;    // 连接ULN2003模块引脚 A或in1
const int motorPin2 = 18;   // 连接ULN2003模块引脚 B或in2
const int motorPin3 = 5;   // 连接ULN2003模块引脚 C或in3
const int motorPin4 = 17;    // 连接ULN2003模块引脚 D或in4
const int stepMode = 8;  //单拍(全步):4    双拍(半步):8

int moveFlag = 1; // 移动标记位
//喂食表示变量
bool wsz=false;

//蜂鸣器
int freq = 2000;
int channel = 0;
int resolution = 8;
int bzPin=16;

// EN
int resPin=4;

AccelStepper stepper(stepMode, motorPin1, motorPin3, motorPin2, motorPin4);
long int oldtime,oldtime2;
void setup(){                           //初始化函数
   
  stepper.setMaxSpeed(1000);    // 步进电机最大速度800
  stepper.setAcceleration(50); // 步进电机加速度50
  Serial.begin(115200);
  stepper.setCurrentPosition(0); // 设置初始位置
  Serial.println("输入新的位置值 0-归位: ");
  
  //蜂鸣器
  ledcSetup(channel, freq, resolution);
  ledcAttachPin(bzPin, channel);
  oldtime=millis();
  oldtime2=millis();
}

void loop(){                            //主循环函数

    // if(millis()-oldtime>60000){
    //     client.publish("1/mtopic", "在线");
    //     oldtime=millis();
    // }
    if(millis()-oldtime2>300000 && wsz){
        ledcAttachPin(bzPin, channel);
        ledcWriteTone(channel, 3000);
        client.publish("1/mtopic", "重启中~");
        delay(2000);
        // oldtime2=millis();
        pinMode(resPin,OUTPUT);
        digitalWrite(resPin,0);
        delay(500);
        digitalWrite(resPin,1);
        
        // ESP.reset();
    }
    // if(millis()-oldtime>3000){
    //     // client.publish("1/mtopic", "on-line");
    //     oldtime=millis();
    //     ledcDetachPin(bzPin);
    // }
    if(idMsg=="wg"){
        client.publish("1/mtopic", "Begin~");
        ledcAttachPin(bzPin, channel);
        ledcWriteTone(channel, 2000);
        
        int newPosition = msg.toInt();
        moveFlag = 0; 
        Serial.printf("正移动到新的位置: %dn", newPosition);
        stepper.move(newPosition);  // Set new moveto position of Stepper
        msg="0";
        idMsg="0";
        delay(2000);
        wsz=true;
        ledcDetachPin(bzPin);
        
    }else if(idMsg=="s"){
        client.publish("1/mtopic", "在线");
    }
    
//   while (Serial.available() > 0)  { 
    
//   }
  if ((stepper.distanceToGo() != 0)) {
    stepper.run();  // Move Stepper into position
  }
  if ((moveFlag == 0) && (stepper.distanceToGo() == 0)) {
    Serial.printf("移动到指定位置!nn");
    Serial.println("输入新的位置值 0-归位: ");
    moveFlag = 1; 
    client.publish("1/mtopic", "OK~");
    
  }
}

视频演示

基于MQTT指令的ESP32远程喂狗器_腾讯视频

人已赞赏
Arduino动态高级进阶

使用ESP32创建Web服务器

2020-5-27 11:11:08

动态

MQTT实时数据在线更新

2020-3-15 0:56:27

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索