亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于MAX32620FTHR的家庭管理器—Home Manager

发布时间:2022-10-04
分享到:

基于MAX32620FTHR的家庭管理器—Home Manager

发布时间:2022-10-04
分享到:

简介
在过去,我做过一些非常有效的项目,但如果当初在做那些项目的时候使用远程控制器的话,效果会更好。我本可以只使用手机作为遥控器,但时至今日,我制作了一个很酷的可扩展设备来实现这一点。

该项目将涵盖我如何构建硬件和您需要做什么来再现它。我还将解释该软件是如何工作的,以及目前它有哪些功能。

目标
最初,我计划只控制家里的一些设备:隐藏的电磁门锁、厨房水槽上方的LED灯,也许还可以远程控制我的机械臂。要实现这些功能,所需的硬件是一个快速的、电池供电的微控制器、一个显示器、一个加速计和一些按钮。

我意识到这个设置有更多的功能,所以我还添加了一些新功能:带有紧急邮件发送的跌倒检测、计步器、跳跃计数器、Dalek,当然还有一个游戏中心。

硬件组件
在输出方面,我有一对1602液晶显示器。大约一年前,我也买了一块0.91英寸的128x32 I2C OLED显示屏。我测试过,但从未用过。由于我的LCD显示器的限制和尺寸,我在这个项目中使用了OLED显示器。

MPU6050 6DoF IMU传感器是一个明显的选择(好传感器,便宜,易于使用等),但我还需要4个简单的按钮在菜单中导航和与功能交互。

选择合适的微控制器比较困难。我有几个arduino,不同类型的ESP8266s,一些其他更大的MCU板和新家伙,MAX32620FTHR由Maxim集成公司。您可能熟悉Arduinos和ESP8266s,所以我将重点介绍所选的一个:MAX32620FTHR。

让我们从形状因素开始:MAX32620有Adafruit羽毛板的形式,这意味着它是相当小的。它是兼容的一堆盾牌羽毛板,但它是不相关的,在我的项目,因为我不会使用任何那些。它还具有PMOD端口:PORT 0和PORT 1。您也可以从顶部或底部访问这些端口。我真的很喜欢这个概念,我在我的项目中只使用了这些端口。这些端口允许我制作一个非常小的设备,而不需要将部件永久焊接到MAX32620或类似的东西上。

该MCU板还通过其MAX77650电源管理集成电路(PMIC)和MAX17055燃料表提供高度可配置的电池充电和详细的电池状态反馈。

该板的另一个优点是它的多个UART和I2C端口。它有4个独立的UARTs和3个I2C或SPI端口!这是我的arduino都不知道的。

它支持Arduino IDE,这很好,但与其他流行的MCU板相比,它也有一个缺点:它没有任何无线功能。我必须把一个ESP8266-01连接到MAX32620,使它连接到互联网。这是一个非常棒的设备,但我认为他们应该添加WiFi或至少BLE功能到这个板。

构建
我们知道所有需要的零件。我们只需要建造它!您将在项目的最后找到原理图。基本上,我们将为板建立2个单独的屏蔽,他们将使用PMOD端口连接。

我们先把所有的led灯都拿走。ESP8266和MPU6050有我们不需要的板载led,但它们会耗电。小心点,MAX32620没有任何永久性的led。

我把OLED显示器和按钮焊接成一个原型PCB部分。我建议先焊接按钮,然后再焊接显示器,因为显示器会使接线变得困难。如果你想让所有东西都贴合在一起,修剪公连接器是必须的。我把绝缘胶带在每个PCB层(OLED,原型,板,传感器,ESP8266)之间预防。安全总比后悔好。显示屏蔽将连接到端口1。除了VCC和GND,显示器还将连接到SDA (P1_6)和SCL (P1_7)引脚。按钮将使用这些gpio: P1_0 - P1_3。我还焊接了双电缆与微JST插头到SDA和SCL引脚。

电池被连接到板的底部。一些双面和/或绝缘胶带将使电池停留在原地。

另一个带有ESP8266-01(简称ESP-01)和IMU的屏蔽板要小得多。它必须和电池并排。我在这里使用了“三明治”结构。首先,我焊接了ESP-01与它的电阻和电容,应该做编程之前开始焊接。请将ESP的TX端口连接到MAX32620的P0_0上,RX端口连接到P0_1上。安装完毕后,请将MPU6050覆盖在ESP-01上。我的最后一句话可能会让你感到困惑,所以请看下面的图片:

IMU将几乎完全覆盖ESP-01。显示屏上的微型JST电缆将连接到MPU6050的SDA和SCL引脚上。正如我前面所说的,MAX32620有3个I2C端口,因此如果需要,您可以很容易地使用其他端口,但我只想使用PMOD端口。如果你需要重新编程ESP-01,你必须手动将它用一根电缆进入闪存模式,然后使用PORT 0引脚访问它。这是可行的,但不是很容易。

在这一步之后,你所要做的就是连接盾牌和电池到MAX32620完成构建!

无线通信
使用ESP8266微控制器可以通过多种方式访问internet。我选择的方法是:为ESP8266实现特定于应用程序的通信,然后让MAX32620通过Serial向ESP-01发送特定于应用程序的命令。

所需的库可以从Arduino IDE的库管理器中下载。

更新您的WiFI网络的ssid和密码:

Const char* ssid = "your ssid";Const char* password = "您的wifi网络密码";

您可以发送电子邮件,向特定主题发布MQTT消息,还可以订阅特定的MQTT主题。

这是我为电子邮件发送制定的协议:

{“类型”:“电子邮件”,“地址”:“test@example.com”,"subject":"消息的主题","message":"消息的内容"}

你必须向ESP-01发送类似的信息,让它发送电子邮件。我使用了由Boris Shobat制作的Gsender库来发送电子邮件。在第一次使用Gsender.h文件之前,你必须在Gsender.h文件中配置电子邮件发送,通过填充/更改缺少的信息:

SMTP_PORT = 465;const char* SMTP_SERVER = "smtp.gmail.com";
const char* EMAILBASE64_LOGIN = "你的base64登录邮箱";const char* EMAILBASE64_PASSWORD = "你的base64密码";const char* FROM = "test@example.com";

如果您正在使用Gmail,它可能会要求您降低帐户的保护级别以允许该功能。

主要的通信方法是基于MQTT。您必须有一个MQTT代理才能使用这个特性。我在树莓派上安装了mosquito to,但你可以使用另一种方法。如果您不熟悉MQTT,您可以在这里找到一些信息。

您还必须在ESP-01的草图中填写服务器地址以使用MQTT代理:

Const char* mqtt_server = "mqtt服务器地址";

我的串行——> ESP-01协议用于MQTT发布如下:

{“类型”:“mqtt”,“主题”:“desired_topic”,“消息”:“内容”}

你也可以订阅主题。你会收到这样的消息:

{"topic":"消息的主题","message":"消息的内容"}

如果要进行某种MQTT开发,我建议使用某种可视化的MQTT客户机。我在OSX中使用MQTTBox,它帮助很大!

这种通信方式工作得非常好,有一些好处(例如并行操作,迁移到其他通信平台很容易),但它也有一些问题(ESP-01固件更新),所以有可能在未来我将重新加载AT固件到ESP-01,并在MAX32620上做所有应用程序特定的事情。然而,如果我这样做,这是一个未来的任务。目前的解决方案非常有效!

编程
要在Arduino IDE中对MAX32620FTHR进行编程,必须遵循以下步骤。一旦你安装了板,你将有两个选项来编程板。

首先,你必须选择板:Arduino IDE / Tools / board / MAX32620FTHR(Bootloader)。断开板,按住BOOT按钮,然后连接到您的PC。几秒钟后,其中一个红色led灯将亮起,表明它已经准备好进行编程。点击上传。

作为第二种选择,程序员也可以使用MAX32625PICO板,但我没有这种方法的经验。

完成的Home Manager有很多功能,我将在单独的段落中详细介绍。

家庭管理器库
MAX32620不是Arduino板,但它有特殊的功能。这意味着许多库在默认情况下无法与此板一起工作,您必须修复它们。

首先,您需要库管理器中的Adafruit GFX和Adafruit SSD1306库来使用OLED显示器。他们都有问题。最新的GFX库(1.2.9)不能与MAX32620一起工作,所以您必须使用更老的版本:1.2.3。Adafruit SSD1306库不支持多个I2C端口,只支持一个I2C端口。PORT 1的I2C端口是Wire0,所以在Adafruit_SSD1306.h和Adafruit_SSD1306.cpp中必须将所有的“Wire”-s更改为“Wire0”。

库管理器中的MPU6050_tockn和ArduinoJson库工作良好,MPU6050_tockn可以处理Wire0。

必须编辑这个库的MAX17055.cpp文件。MAX32620可以通过Wire2到达MAX17055,所以您必须将所有的“Wire”-s更改为“Wire2”。幸运的是,使用MAX77650库不会有这个问题。

之后你就可以把我的草图上传到MAX32620了。

引导
当你启动Home Manager时,你会看到一个启动画面:

启动画面将有一个Hackster。左边是io的logo,中间是Home Manager的标题,右边是Maxim Integrated的logo。当MPU6050的校准完成后,您将在几秒钟内从启动屏幕继续前进。如果你卡在启动画面上,那应该是由IMU的问题引起的。

您可以在Home Manager的菜单中使用按钮进行导航。你可以使用“Enter”(中间的按钮)进入子菜单或“应用程序”,你可以使用“左”和“右”按钮在菜单中向左和向右移动,最后右上角的按钮是“返回”。制作logo花了我一些时间,但我认为它们看起来效果还是不错的。

游戏
在这一点上,我们达到了Home Manager的实际功能。我要讲的第一个功能当然是游戏。因为它很有趣。

目前我只制作了一款游戏:《恐龙》。这是类似的T-Rex游戏在谷歌Chrome。回车键和后退键是你所期望的,你可以使用右键跳跃。

不过有一点,我的相机显示有问题,因此运动模糊,玩的时候会看起来很奇怪。奇怪的移动物体看起来应该比现实生活中的物体更像,恐龙、仙人掌等都是我手工制作的位图。我尽可能地添加了许多动画(奔跑,跳跃,移动地面等)。很抱歉,由于显示器/相机的问题,我不能展示更多照片。这是一个简单的游戏,但如果你有任何问题,请随时留言。我认为恐龙游戏是一个巨大的成功,但我很遗憾,由于相机的问题,我不能向你展示全部。

其他
前进。其他菜单有一个子菜单,电池,电池监测功能。它打印出活电池信息,直接从MAX17055接收。你必须先设置电池容量,但之后你会收到电池状态%,剩余时间,当前电压和类似的电池相关信息。它对电池供电的设备非常有用,我真的很喜欢它。

我忘了提到,但是如果您想从电池运行系统,您应该将MAX77650_PHLD引脚(P2_2)设置为高,以启用该功能。如果你不这样做,它只会在大约1-2秒的时间内由电池供电。您还需要从代码中实现充电功能,但您可以在我的草图中找到它。

安全
安全子菜单中的第一个功能是呼叫帮助。在使用这个函数之前,你应该在Home Manager草图中设置这些常量:

如果你输入呼叫帮助功能,你会看到你的联系人的电子邮件地址。一旦您点击请求帮助(回车),一封电子邮件将被发送到“EMAIL_CONTACT”,并带有“EMERGENCY_MSG”消息。这是非常直接和有效的。

最后一个功能是跌倒检测。如果您跌落,电子邮件将被发送到'EMAIL_CONTACT'。你可以通过更新FALL_MSG来指定消息:

我摔倒了,请帮忙!

您可以启用或禁用该功能。下落探测也使用了加速度计。它的工作原理类似于计步器或跳跃器,这意味着它有相同的问题:对虚假的摔倒事件敏感。我把门槛设得相当高,这很有帮助,但还是很适合测试,但我不能拿我的生命安全赌它现在的状态。为了进行正确的跌倒检测,我们可能需要更多不同的传感器。

结论
我真的为Home Manager感到骄傲,即使它只是在早期的alpha阶段。我想做一个概念项目的证明,但结果比我最初计划的要多得多。很容易扩展它的功能,所以我很可能会在未来的其他项目中使用它。

我将来肯定要做的一件事就是重构和优化代码。我认为它还不错,但大幅增加的功能在代码中留下了印记。我将把它分成更小的部分,我将为函数创建一个类似行为的应用程序。

也许我应该为这个设备做一些覆盖物,但实际上我真的很喜欢这种裸露的,没有设计的设计,电线和pcb,所以我们拭目以待。

本文中所用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:Balázs Simon,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论