基于ESP32的MQTT远程喂狗器

释放双眼,带上耳机,听听看~!

 材料

  1. esp32开发板*1
  2. 步进电机
  3. 电源
  4. 无源蜂鸣器(可替换成有源,程序要修改)
基于ESP32的MQTT远程喂狗器
基于ESP32的MQTT远程喂狗器

控制原理

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

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

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

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

 

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

程序

[scu name=”arduino-ide-post”]

/*
*趣讨教创客网: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~");
    
  }
}

[/scu]

视频演示

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

给TA打赏
共{{data.count}}人
人已打赏
免费项目

使用ESP32创建Web服务器

2020-5-27 11:11:08

免费项目

通过 NodeMCU (ESP8266) 将传感器数据上传至 MQTT 云服务

2020-7-11 22:27:52

6 条回复 A文章作者 M管理员
  1. 末世之王

    很好很好很好 加油努力 你可以的

  2. 末世之王

    非常棒!学习了!

  3. 末世之王

    日常打卡

  4. 末世之王

    你终于复活了 这个网站很有前途 可是收费方面把网站的聚焦点给废了 应该放开讨论 资源共享 先把敌人干掉占有市场,然后再进行有偿提供资源分享 创客迟早普民化 尽早拥有自己的粉丝团肯定是好事

    • Luca

      大部分都是不收费的呢,只有小部分原创的是需要的,这也是为了让网站有经费维持下去才不得已为之!

  5. 春天一满屋

    很好很好很好 加油努力 你可以的

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
'); })();