ESP32 + Python 还不知道怎么垃圾分类? 用HaaS DIY一个智能垃圾桶吧

2023-05-16

来这里发现更多创意案例

HaaS开发框架HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。https://haas.iot.aliyun.com/solution/
本系统在物体接近后,通过红外避障传感器检测到物体,然后启动摄像头抓拍图片上传至云端,云端通过HaaS增值服务对抓拍的图片进行识别,并将垃圾类别、物品名称和可信度等信息返回给设备端,设备端根据返回的垃圾类别,自动打开对应类别的垃圾桶,待投放者离开后,再关上垃圾桶。

下图是本案例的四步导学。

1、简介

1.1、背景知识

  
红外避障传感器:利用物体的反射性质,在一定范围内,如果没有障碍物,发射出去的红外线,距离越远越弱,如果有障碍物,红外线遇到障碍物就会被反射,传感器接收头接收到这一信号,就可以确定正前方有物体。

  
HaaS增值服务:集多种人工智能算法为一体的云端服务,通过设备端上传图片到云端,云端对图片进行识别,并把结果返回给设备的服务,目前已涵盖图片识别、文字识别、物品识别、人型识别等多个类别。详情请参考:HaaS AI API说明文档

  
垃圾分类目前分为可回收垃圾、有害垃圾、厨余垃圾(湿垃圾)、其他垃圾(干垃圾)。

  
实验整体步骤如下:

  1. 连接硬件
  2. HaaS云端积木平台创建设备
  3. 设备端开发
  4. 设备运行

1.2、准备

  1. M5Stack Core2开发板 一套
  2. M5Stack Unit CAM摄像头 一个
  3. 连接线 一根
  4. 红外避障传感器 一个
  5. SG90舵机 一个
  6. 公对母、公对公杜邦线 若干

涉及到的硬件购买链接如下,仅供参考,不负责商家发货的品质保障等问题!

名称数量参考链接
M5Stack Core2开发版1M5Stack Core2
microUSB数据线1M5Stack Core2开发套件自带
摄像头1M5Stack Unit CAM摄像头
连接线1条M5Stack GROVE连接线 请选用10cm长即可
红外避障传感器1红外避障传感器
公对母杜邦线若干杜邦线 请选用10cm长即可
SG90角度舵机1SG90舵机

  
硬件连线图如下图所示:

2、云端平台功能

在本案例中涉及到云端平台功能都聚合在HaaS云端积木中,所以无需单独使用 对象存储OSS 和 视觉智能开发平台。因此,整个云端步骤分为下面两步。

1. 注册阿里云账号并登录;
2. 登录HaaS云端积木控制台创建设备;

2.1、注册阿里云账号

  
进入阿里云官网,如已有阿里云账号可跳过这步,注册阿里云账号 。

2.2、HaaS云端积木平台创建设备

  1. 登录HaaS云端积木平台

  
进入阿里云官网,用阿里云账号登录HaaS云端组件控制台 。

  1. 创建设备

  
在左侧导航栏设备管理中,可以看到产品和设备选项,点击“产品”,可以看到平台默认创建了“haas_正式游客产品”这个产品;
所以开发者只需要创建设备即可。点击“批量添加”, 添加方式为“自动生成”, 申请数量可填为“1”个,即可完成新设备的创建。

  1. 获取设备的三元组

  
在设备的列表中,新创建的设备上点击“查看”,就可以获得设备的三元组信息,之后这个三元组信息会在设备端代码中使用到。

  
请复制该处的三元组信息,后面设备端开发需要使用。

3、设备端开发

3.1、开发环境

  
在进行下一步之前请确保M5StackCore2开发环境已经搭建完毕。详情请参考M5StackCore2快速开始的说明。
 

3.2、创建解决方案

  
如下图所示,在Haas Studio中创建项目。先选择左侧的“开发板型号”再从右侧的案例中选择“智能垃圾桶”案例点击“立即创建”即可。

3.3、代码准备

  
将智能垃圾桶代码目录下的所有脚本进行复制到“smart_trashbin”工程根目录中,然后进行如下设定完成设备端代码的开发。

Python脚本的详细说明请参考脚本内嵌的文字注释

1、修改路由器名称及密码

  
修改main.py中SSID和PWD的值为读者实际要连接的路由器的名称及密码(请注意名称和密码都需要放在''符号中间)。

# Wi-Fi SSID和Password设置
SSID='Your-AP-SSID'
PWD='Your-AP-Password'

  
修改完成之后connect_wifi函数就会连接读者自己设定的路由器。

2、修改设备的三元组信息

  
请参考“获取设备的三元组步骤”,把获取的三元组信息,填入main.py中:

# HaaS设备三元组
productKey = "Your-ProductKey"
deviceName  = "Your-devicename"
deviceSecret  = "Your-deviceSecret"

4、运行结果

  
推送此脚本到M5Stack Core2之后,网络连接成功后,屏幕上将打印出IP地址和"NTP Done",如果迟迟不能显示“NTP Done”,请长按电源键关机同时拔掉USB线重新上电运行。

  
把要识别的垃圾放到大约距离红外传感器1-10cm处,当传感器上两个灯都亮起时,表明检测到物体开始垃圾分类识别,识别成功后在屏幕上显示红色XXXX Detected的字样,XXXX是四种垃圾分类的一种,样例log如下。在检测成功后,会根据识别的垃圾类型,打开对应类别的垃圾桶。

  
推送此脚本到M5StackCore2之后,通过PC端串口调试工具可以看到设备端打印如下日志。日志的含义为:

  • “link platform connected” 代表成功连接到云端平台。
  • "upload--->"之后跟着的为设备端向云端发送的请求信息,其中"eventName"为"classifyingRubbish",表示需要云端进行垃圾分类识别。
  • "download <----"之后跟着的是收到云端回复的识别结果信息:
    • result:识别是否成功。(success:识别成功,failed:识别失败)
    • elements:数组元素说明:
      • category:垃圾类别。包括可回收垃圾、干垃圾、湿垃圾、有害垃圾。
      • categoryScore:识别出的垃圾类别的置信度。
      • rubbish:物品名称
      • RubbishScore:物品名称的置信度。
  • detected: Recyclable 表示当前检测到的垃圾是可回收垃圾。
  • open the Recyclable bin 表示将要打开可回收垃圾桶盖。
I (71364) phy: phy_version: 4500, 0cd6843, Sep 17 2020, 15:37:07, 0, 0
Wi-Fi is connecting...
Wi-Fi is connecting...
Wi-Fi is connected
IP: 192.168.xxx.xxx
NTP start
NTP done
E (61287) ACTIVATION_REPORT: activation success

establish tcp connection with server(host='${Your-ProductKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
link platform connected
IR detector ...
启动红外检测线程
有物体进入
upload--->{'qos': 1, 'payload': '{"version": "1.0", "id": 1, "params": {"ext": "{\\"fileName\\": \\"test.jpg\\", \\"fileId\\": \\"xxxxx\\", \\"filePosition\\": \\"lp\\"}", "eventType": "haas.faas", "eventName": "classifyingRubbish", "argInt": 1}}', 'topic': '/sys/xxxxx/xxxxx/thing/event/hli_event/post'}
download <----{'msg_id': 2136609361, 'service_id': 'hli_async_service', 'params': '{"ext":"{\\"elements\\":[{\\"category\\":\\"Recyclable\\",\\"categoryScore\\":0.9868,\\"rubbish\\":\\"\u706f\u7ba1\\",\\"rubbishScore\\":0.9868}],\\"result\\":\\"success\\",\\"sensitive\\":false}","commandName":"classifyingRubbishReply","commandTyperecognize time : 2378
":"haas.faas","argInt":1}', 'code': 0, 'params_len': 245}
detect: Recyclable
detected: Recyclable
open the Recyclable bin

  
动手改造一下手边的小垃圾桶,通过舵机控制垃圾桶盖的开合,实现自动打开对应类别垃圾桶的效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32 + Python 还不知道怎么垃圾分类? 用HaaS DIY一个智能垃圾桶吧 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip

随机推荐