基于涂鸦智能的宠物喂食器

基于涂鸦智能的宠物喂食器

  • 一、开发计划
  • 二、涂鸦三明治开发套件
    • 涂鸦三明治 Wi-Fi MCU 通信板+喇叭
    • 涂鸦三明治H桥直流电机驱动功能板
    • 涂鸦三明治直流供电电源板
    • MCU主控板
  • 三、产品开发
    • 1、产品创建
      • 进入涂鸦IoT平台创建产品
      • 选择对应的功能点和设备面板
      • 下载SDK
    • 2、MCU SDK移植
      • 对串口寄存器的数据读取
      • 将数据通过串口发送
      • 在main.c中加入函数调用
    • 3、完善DP点功能
      • 所有DP点的上报
      • 小夜灯下发功能
      • 温湿度数据上报
      • 余粮重量
      • OLED显示
      • 电机部分
      • 手动喂食和自动喂食
  • 四、过程及结果展示

一、开发计划

请看github:https://github.com/594642987/Tuya-Feed

二、涂鸦三明治开发套件

涂鸦三明治 Wi-Fi MCU 通信板+喇叭

在这里插入图片描述

涂鸦三明治H桥直流电机驱动功能板

在这里插入图片描述

涂鸦三明治直流供电电源板

在这里插入图片描述

MCU主控板

利用以前做的STM32F030C8T6最小系统板作为主控板(图中WBR3已坏)。 

在这里插入图片描述

三、产品开发

1、产品创建

进入涂鸦IoT平台创建产品

	涂鸦IoT平台地址:https://iot.tuya.com/
​ 	在涂鸦IOT平台找到 创建产品 -> 小家电 -> 宠物喂食器由于这里是VWXR2模组,所以通讯协议应选择Wi-Fi

在这里插入图片描述

选择对应的功能点和设备面板

在这里插入图片描述
在这里插入图片描述

下载SDK

在这里插入图片描述

2、MCU SDK移植

下载的MCU_SDK里面有以下文件

在这里插入图片描述

对串口寄存器的数据读取

在stm32f0xx_it.c中对在USART1_IRQHandler中加入以下代码(需要引入头文件mcu_api.h)
void USART1_IRQHandler(void)
{/* USER CODE BEGIN USART1_IRQn 0 */unsigned char value;/* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 */if((USART1->ISR & UART_FLAG_RXNE) != 0){value = USART1->RDR;extern void uart_receive_input(unsigned char value);uart_receive_input(value);}/* USER CODE END USART1_IRQn 1 */
}

ISR是USART的中断状态寄存器,UART_FLAG_RXNE(为1代表USART的读取寄存器不为空),也就是说USART接受到了数据。

RDR是USART的接收寄存器,从RDR中取出数据赋值到value

uart_receive_input(value)在mcu_api.c,将串口接受到的数据交由MCU_SDK处理

不同的芯片的中断状态寄存器和接收寄存器的名称不一样,具体需要看官方的代码。(比如航顺的中断状态寄存器是SR,接收寄存器和发送寄存器共用DR)

将数据通过串口发送

在protocol.c中找到下列函数(需要引入头文件#include “usart.h”)

/*** @brief  串口发送数据* @param[in] {value} 串口要发送的1字节数据* @return Null*/
void uart_transmit_output(unsigned char value)
{//#error "请将MCU串口发送函数填入该函数,并删除该行"HAL_UART_Transmit(&huart1, &value, 1, 1000);
/*//Example:extern void Uart_PutChar(unsigned char value);Uart_PutChar(value);	                                //串口发送函数
*/
}

这里我们调用STM32的HAL库HAL_UART_Transmit,传入的参数含义
HAL_UART_Transmit(串口名,数据的首地址(指针),数据个数,发送超时时间)

在main.c中加入函数调用

在这里插入图片描述
然后可以将上述函数中的#error删掉了,基本上MCU与模组的串口通信基本完成了
在这里插入图片描述

3、完善DP点功能

所有DP点的上报

这里要先处理all_data_update的函数,看个人习惯,这里不打算使用
在这里插入图片描述

小夜灯下发功能

static unsigned char dp_download_light_handle(const unsigned char value[], unsigned short length)
{//示例:当前DP类型为BOOLunsigned char ret;//0:关/1:开unsigned char light;extern unsigned char Light_Switch;light = mcu_get_dp_download_bool(value,length);if(light == 0) {//开关关Light_Switch = 0;HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);}else {//开关开Light_Switch = 1;HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);}//处理完DP数据后应有反馈ret = mcu_dp_bool_update(DPID_LIGHT,light);if(ret == SUCCESS)return SUCCESS;elsereturn ERROR;
}

温湿度数据上报

将SHT30获得的数据上报

void SHT30_Update(float temperature, float humidity){if(count == 0){mcu_dp_value_update(DPID_TEMPERATURE, (uint32_t) (temperature));mcu_dp_value_update(DPID_HUMIDITY, (uint32_t) (humidity));}count++;count = count%Limit;
}

余粮重量

在HX711变化大于一定值(10)时才上报余粮重量值,否则在经过Cnt_Limit次循环后更新一下重量。

#define GapValue 213
#define Cnt_Limit 200	//通过while(1)循环次数来定时上报uint32_t HX711_Buffer;
uint32_t Weight_Maopi=0;
int32_t Pre_Weight = 0;
int32_t Weight=0;
int Cnt = 0;
void Weight_Update(void){Pre_Weight = Weight;mcu_dp_value_update(DPID_WEIGHT,(unsigned long)Weight);
}
int My_abs(int k){return k>=0? k:-k;
}
void Weight_Handle(void){if(My_abs((int)(Weight-Pre_Weight))>=10){Weight_Update();Cnt = 0;}else{Cnt++;if(Cnt>=Cnt_Limit){Weight_Update();Cnt = 0;}}
}

OLED显示

将温湿度、重量字符串进行拼接然后在OLED上显示

     sprintf(ch2,"Weight = %3d(g)",(int)Weight);strcat(ch,ch2);//OLED_Clearrow(0);OLED_ShowString(0, 0, ch, strlen(ch));

电机部分

由于测试的时候不小心反接了电源加上数据线断了,只能先鸽着。
下面是电机的代码。//没有经过测试需要后面细调整


#include "motor.h"
/*----------------------------------------------------------------
IN1 ---- PB10
IN2 ---- PB11
IN3 ---- PB12
IN4 ---- PB13GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13
*/
void Motorcw(int time){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);HAL_Delay(time);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);HAL_Delay(time);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);HAL_Delay(time);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);HAL_Delay(time);
}void Motorccw(int time){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);HAL_Delay(time);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);HAL_Delay(time);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);HAL_Delay(time);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_SET);HAL_Delay(time);
}void MotorStop(void){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_10, GPIO_PIN_RESET);
}void MotorHandle(int sign, int time){unsigned char speed = 25;while(speed>=4){for(int i=0; i<10; i++){if(sign) Motorcw(time);else Motorccw(time);}speed--;}MotorStop();
}

手动喂食和自动喂食

static unsigned char dp_download_quick_feed_handle(const unsigned char value[], unsigned short length)
{//示例:当前DP类型为BOOLunsigned char ret;//0:关/1:开unsigned char quick_feed;quick_feed = mcu_get_dp_download_bool(value,length);if(quick_feed == 0) {//开关关}else {//开关开MotorHandle(1,10);//slow_feed就是将10改成30}//处理完DP数据后应有反馈ret = mcu_dp_bool_update(DPID_QUICK_FEED,quick_feed);if(ret == SUCCESS)return SUCCESS;elsereturn ERROR;
}

四、过程及结果展示

哔哩哔哩:https://www.bilibili.com/video/BV1TA411K7Gk/

本文章允许涂鸦智能转载使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26649.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宠物领养平台的分析与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 文末获取源码 项目编号:BS-PT-052 运行环…

智能宠物项圈app开发解决方案

智能宠物项圈app开发解决方案&#xff0c;今天主要介绍的就是智能宠物项圈app开发方案中的功能。它的功能主要有多重定位&#xff0c;实时定位、出入范围提醒&#xff0c;踪迹随时可寻、远程呼唤、电子围栏、活动监测等&#xff0c;接下来我就来全面的介绍一下。 智能宠物项圈a…

宠物店会员管理系统| 宠物店小程序

国内养宠家庭非常多&#xff0c;推动着国内宠物市场发展&#xff0c;而围绕宠物的细分行业&#xff0c;如宠物食品、宠物用品/医疗/美容/婚介/殡葬等&#xff0c;2019年我国宠物市场规模达2024亿元&#xff0c;预计2023年&#xff0c;市场规模将突破4000亿元左右。 未来的宠物市…

智能宠物饲养系统设计

word完整版可点击如下下载>>>>>>>> 智能宠物饲养系统设计.rar-其它文档类资源-CSDN下载1、资源内容&#xff1a;毕业设计lun-wenword版10000字&#xff1b;开题报告&#xff0c;任务书2、学习目标&#xff1a;快速更多下载资源、学习资料请访问CSDN下…

宠物服务App功能简介

随着时代的变革与发展人们的生活变得越来越好&#xff0c;也变的越来越多样化。物质生活的满足后&#xff0c;人们开始找寻其他的一些兴趣爱好&#xff0c;让自己的生活变的更加多彩&#xff0c;有人种花、有人养鸟、有人养猫、有人养狗等等。不管是养什么都是需要细心照顾才能…

线上宠物领养系统

实现功能 客户端&#xff1a;客户可以查询数据库的宠物信息并根据查询的宠物信息选择自己喜欢的宠物进行领养。 服务器&#xff1a;服务器实现了对管理员相关信息的保存&#xff0c;管理员必须输入正确的用户名和密码才能对数据库信息进行增删改查等操作。服务器也可以直接对数…

软件官网页面模板

此项目由Htmlcss结构搭建而成 里面自适应移动端而做出调整 上代码: 使用了该模板的请将出处表明 项目结构 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" conte…

(学习笔记)使用CHATGPT写的前端页面模板

一、学生管理系统的登录页面 写一个好看的学生管理系统的登录页面&#xff0c;学生使用用户名和密码进行登录 <!DOCTYPE html> <html> <head><title>Student Management System - Login</title><style>body {font-family: Arial, sans-s…

如何将ChatGPT用到Facebook的文案生产中?

ChatGPT 是一款由 OpenAI 所开发的大型语言模型&#xff0c;它可以生成高质量、自然流畅的文本&#xff0c;具有很强的语言理解和生成能力。这使得它成为了一个非常有用的工具&#xff0c;可以应用于许多领域中&#xff0c;包括文案生产。 Facebook 是全球最大的社交媒体平台之…

转载。1AGI 14个关键问题

信息爆炸的 10 篇 AGI 访谈&#xff0c;我们从中整理了 14 个关键问题 原创 Founder Park Founder Park 2023-04-16 19:00 发表于北京 自从 GPT-4 发布以来&#xff0c;媒体高度关注 OpenAI 和其内外部相关人士&#xff0c;重要角色的视频、播客和文章访谈频频出现。为了节省…

下一个“AI王炸”,别只盯着OpenAI,DeepMind也在憋大招

过去几个月&#xff0c;OpenAI风头无两&#xff0c;各大科技公司争先恐后地跟进大语言模型&#xff08;LLM&#xff09;这一技术路线。 对比之下&#xff0c;OpenAI的老对手DeepMind&#xff0c;显得有些低调和沉默。微软靠OpenAI打了一场胜仗&#xff0c;而谷歌推出的Bard翻了…

2023年最好用的办公AI工具,让你工作效率提升10倍!

2023年是AI工具大爆发的一年&#xff0c;在效率办公领域&#xff0c;同样涌现出了很多优秀的AI办公工具&#xff0c;小编亲测了几款&#xff0c;都是宝藏好用的App&#xff0c;以下排名不分先后&#xff0c;一起来看看吧&#xff01; AI办公工具哪个好 GitMindNotion AI酷表C…

[论文速览] Sparks of Artificial General Intelligence: Early experiments with GPT-4

Sparks of Artificial General Intelligence: Early experiments with GPT-4 2023.3.22 微软官方发布了目前人类史上最强AI模型 GPT-4 的综合能力评估论文&#xff0c;总所周知&#xff0c;2023年是通用人工智能&#xff08;Artificial General Intelligence&#xff0c;AGI&a…

Python3常用其他API速查手册(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 最近更新时间&#xff1a;2023.7.18 最早更新时间&#xff1a;2022.6.27 运算符 - * /" / “就表示 浮点数除法&#xff0c;返回浮点结果;” // "表示整数除法。取余% 指数**等式&#xff1a; > < > <不等于&#xff…

比chatPDF更优秀的国内平替

chatPDF是个非常不错的点子。基于openai的embeddeding接口。但是它有两个缺点。 1、当然是需要魔法才能访问。 2、它和微调不同。所有问题都是基于现有文档。而且每次都是根据你的提问&#xff0c;在文档转化成的向量数据里寻找相关联的内容&#xff0c;一同发给 chatGPT&…

我的plus也GG了

用的好好的4.0&#xff0c;突然就被封了&#xff0c;好在是把钱也退给我了&#xff0c;真是好人啊 刚才找到个chatGPT的镜像&#xff0c; 有GPT4,还可以上传word和pdf的网站ppword.cn

ChatGPT小技巧:如何提升提问效率

别人使用ChatGPT一天内能完成100个网站设计&#xff0c;而你却无法完成一个简单的小程序。原因很可能是你并不清楚自己到底想要什么&#xff0c;导致ChatGPT在没有明确需求的情况下无法生成满意的作品。 不用担心&#xff0c;今天我要分享的这个提示将帮助你解决这个难题。 只需…

经典论文-MobileNetV2论文及实践

**### 2019-MobileNetV2 MobileNetV2: Inverted Residuals and Linear Bottlenecks MobileNetV2: 倒置残差和线性瓶颈 作者&#xff1a;Mark Sandler, Andrew Howard, Menglong Zhu, Andrey Zhmoginov, Liang-Chieh Chen单位&#xff1a;Google 论文地址&#xff1a; https…

首次!中国移动在Nature 杂志子刊 Nature Electronics发表5G高能效通信技术文章

中国移动最新发表在Nature Electronics上的5G论文&#xff1a;面向绿色未来的高能效5G技术 中文版 中国移动首席科学家易芝玲博士、韩双锋博士和边森在最近发表在 nature electronics 的评论文章中分析了5G能效以及如何提高能效的方法。 摘要&#xff1a;能量效率 EE&#xf…

仿10086电信业务平台

目录 配置环境 框架图 模块分析 四大板块 功能代码段 语音播报 数据库调用 显示时间 总体框架 完整代码&#xff1a; 文末附完整代码链接 配置环境 VC6.0 东进语音卡 Access数据库 ADO接口技术 在VC6.0中&#xff0c;我们通过新建MFC&#xff08;微软基础类库&…