esp8266 自动喂鱼

2024-03-12 01:59
文章标签 自动 esp8266 喂鱼

本文主要是介绍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 自动喂鱼的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/799800

相关文章

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

IDEA如何让控制台自动换行

《IDEA如何让控制台自动换行》本文介绍了如何在IDEA中设置控制台自动换行,具体步骤为:File-Settings-Editor-General-Console,然后勾选Usesoftwrapsin... 目录IDEA如何让控制台自http://www.chinasem.cn动换行操作流http://www

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心