esp8266 自动喂鱼

由于过年回家时间长,家里养的鱼没人喂,自己又想DIY一个。决定动手搞一个,搞之前也看了几个其他视频教程,参考着结合自己身边的废品做了一个,先上图

使用物品:

esp8266+电机驱动板+tt电机(从地盘拆下来的)

三通水管接口(鱼缸过滤剩下的)、弹簧(从洗洁精上拆的)、口径8mm水管 一段(也可以用别的替代)

安卓手机+ioT MQTT Panel 软件

云服务器 部署MQTT服务器(如果不需要联网的话,也可以不使用)

实现了点击喂鱼按钮就可以驱动电机,把食物推到鱼缸,随时随地都可以喂鱼啦

代码部分

from umqtt.robust import MQTTClient
from machine import Pin
import machine
import network
import time
import utime

from machine import Timer
client_id = "slim_id"
mserver = '14.21.127.73'
port=6008
mq_user='xxx'
mq_password='xx'

topic_ctl = b'lot_ctl'#设备订阅的主题,客户端推送消息的主题
topic_sta = b'lot_sta'#客户端订阅的主题,设备推送消息的主题
client = None
 
 
SSID = "CU_11111111111"
PASSWORD = "7e7hecz5111111111111111"


 

def dianjiA(status):
    D1 = Pin(5,Pin.OUT)   
    D3 = Pin(0,Pin.OUT)  
    if status:
        print('打开电机...')
        D1.value(1)
        D3.value(1)
    else:
        print('关闭电机...')
        D1.value(0)
        D3.value(0)    

def feedFish():
    dianjiA(True)
    utime.sleep_ms(200)
    dianjiA(False)
def do_connect():
    
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect(SSID, PASSWORD)
 
    start = time.ticks_ms() # get millisecond counter
    while not wlan.isconnected():
        time.sleep(1) # sleep for 1 second
        if time.ticks_ms()-start > 20000:
            print("connect timeout!")
            break
 
    if wlan.isconnected():
        print('Connected! network config :', wlan.ifconfig())
 
def reconnect():   #重启开发板
    print('Failed to connect to MQTT broker. Reconnecting...')
    time.sleep(5)
    client.reconnect()
 
def sub_callback(topic, cmd):
    """
    收到订阅消息回调
    """
    global client
    print((topic_ctl, cmd))
    print(cmd)
    if cmd == 1 or  cmd == b'1':
        pub_msg = 'LED1: ON-state'
        feedFish()
    elif cmd == b'led1 OFF' or cmd == b'led1 off':
        pub_msg = 'LED1: OFF-state'
    elif cmd == b'led2 ON' or cmd == b'led2 on':
        pub_msg = 'LED2: ON-state'
    elif cmd == b'led2 OFF' or cmd == b'led2 off':
        pub_msg = 'LED2: OFF-state'
    else:
        pub_msg = 'other msg'
    client.publish(topic_sta, pub_msg, retain=True)

def connectMQTT():
    client = MQTTClient(client_id, mserver, port, user=mq_user, password=mq_password,keepalive=60)
    client.set_callback(sub_callback)
    client.DEBUG = True
    if not client.connect(clean_session=False):
        print("New session being set up")
        client.subscribe(topic_ctl)
 
    client.publish(topic_sta, 'ESP32 Device online', retain=True)
    print("Connected to %s, subscribed to %s topic" % (mserver, topic_ctl))
    return client
   

#     except OSError as e:
#          print(e)
#          print('off line')
#          restart_and_reconnect()
#     finally:
#         if client is not None:
#             print('off line')
#             client.disconnect()
    

#do_connect()        
# 若能连接到 broker,调用 connect(),反之调用 reconnect()


def keepLiveTimeCb(client):
    print("ping....")
    client.ping()
    do_connect() 
try:
    do_connect() 
    client = connectMQTT()
    tim = Timer(-1)
    keepLiveTime = 30
    tim.init(period=keepLiveTime*1000, mode=Timer.PERIODIC, callback=lambda t: keepLiveTimeCb(client))
    while True:
       client.wait_msg()
    time.sleep(5)   
except OSError as e:
    reconnect()
finally:
    if client is not None:
        print('off line')
        client.disconnect()          



 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值