本文主要是介绍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 utimefrom 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 = NoneSSID = "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 counterwhile not wlan.isconnected():time.sleep(1) # sleep for 1 secondif time.ticks_ms()-start > 20000:print("connect timeout!")breakif 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 clientprint((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 = Trueif 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 = 30tim.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()
这篇关于esp8266 自动喂鱼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!