×

一款支持WiFi的体重秤

消耗积分:2 | 格式:zip | 大小:0.62 MB | 2023-02-07

张杰

分享资料个

描述

概括

这是一款支持 WiFi 的体重秤,主要用于称重食物和追踪卡路里。如果您正在节食,如果您跟踪卡路里摄入量以保持体重,或者如果您正在健身并且只是想通过关注营养来改善您的结果,这将非常有用。

它可以非常精确地称量食物,最高可达十分之一克,计算卡路里能量,在 LCD 上显示此信息,使用 RESTful API,您可以传输重量信息、调整设置或远程控制秤。

基本原理

我开始这个项目的原因是因为我想帮助我的妻子追踪食物。我们都有 FitBit 智能设备,我们喜欢 FitBit 帮助实现这些目标的方式。他们擅长追踪能量消耗,但不擅长记录食物。由于一些烦人的错误、缺乏功能和不完整的食物数据库,我刚刚创建了一个网络应用程序,我们从那里记录我们的食物,然后通过他们的 REST API 将这些数据发送到 FitBit。基本上我为它创建了一个更好的界面,允许我们创建一个共享的食物数据库。我目前没有使用该网络应用程序来记录我的食物(不再节食),即使我仍然戴着 FitBit 追踪器,但我的妻子喜欢每天使用它(即使她只是想保持体重)。

我们这样做的方法是用传统的厨房秤称重食物,然后将重量手动输入到网络应用程序中。在我们在电话上输入信息之前,我们不知道食物实际含有多少卡路里。所以我告诉我的妻子:“如果我告诉你我可以给你做一个能够将你的食物记录到 FitBit 的体重秤,你会怎么说,这样你就不需要手动输入体重,而且你将能够实时查看卡路里,以便您可以添加或删除东西以将东西控制在预算之内?:)。”最初我还想显示当天消耗/剩​​余的能量,但我决定在秤 LCD 上包含最少的信息。

我不得不决定是购买一个称重传感器并自己制作外壳,还是购买一个便宜的秤,并将其用于内部的称重传感器和稳定的底座。

我选择购买便宜的秤,其中只保留称重传感器和带按钮的外壳。如果您认为它看起来或效果更好,您可以决定创建自己的案例。我对结果很满意,即使它看起来不太好,但是嘿,这是一个 DIY 的东西......

它有什么可恶的?

哦,好吧......你会亲眼看到它的:) 它有一种很好的态度。

 
20180924_192814_rSbNyJgZmM.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 
 
20180924_192848_vhgbVv6kNz.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 
 
20180924_192736_3ldIDJEGts.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 

产品说明书

开机/关机

右侧有一个机械开/关开关,靠近充电端口。确保它已打开。

您可以通过短按红色(左)按钮打开体重秤。

要关闭电源,请长按黑色(右)按钮至少 3 秒钟。

您也可以从 API 关闭电源。

开机时,标志 LED 亮起,然后在网络连接后变暗到 20% 左右,然后在 5 秒内完全变暗。

省电:自动关机

如果 90 秒不活动,体重秤会自动关机。不活动意味着在此期间未检测到体重变化。此外,作为电池的保护措施,体重秤有一个设置为 5 分钟的通用关机定时器,无论是否处于活动状态。这些计时器可通过 API 自定义。

2022.2 中的新增功能:如果您不构建花哨的闭锁电路,体重秤将关闭其大部分组件并进入深度睡眠以节省能源。使用闭锁电路,一切都会关闭。

收费

该秤包含一块 1000 mAh 可充电锂离子电池。充满电后,体重秤通常可以使用 1-2 个月。LCD 上有电量指示器。当电量低于 15% 时,内部 LED 会持续闪烁,建议将充电器插入右侧 USB 插座。您可以使用任何 USB 充电器,但建议使用 5V/1A 充电器。

该电池应在 1 小时 45 分内充满电。

充电期间,红色 LED 灯会亮起。充满电后,蓝色 LED 灯亮起。

使用USB充电器时有短路保护和过充保护。

最大输入电压:8V(USB 端口的规格为 5V,误差范围为 5%)。

注意事项

锂离子电池可能很危险,尤其是旧电池。如果您发现它有任何变热(甚至不应该变热)或肿胀的迹象,请停止充电并更换新的。您可以用 1000mAh - 2000mAh 电池更换它,对于给定的充电电路永远不会更低。

请勿尝试将USB线插入esp8266的usb口给电池充电,USB线连接esp8266进行调试时,请勿将充电器插入充电口。该端口仅用于调试和编程,并且只能在机械开关处于关闭位置时使用。使用此端口时不要关闭开关,您将为电池提供电流,绕过充电电路,从而防止过度充电,并且很有可能损坏电池。锂离子电池过度充电会引起火灾和爆炸!

即使计算机在 USB 端口上提供低电流(通常为 250mA),所以电流还可以,但电压对于锂离子电池来说太高了(它会在 4.8V - 5V 之间,因为它通过肖特基二极管),而锂离子电池的绝对最大电压应为 4.2V。

联网

该秤可以连接到现有的 WiFi b/g/n 网络,或者在网络设置模式下可以充当热点。

默认网络设置:

当秤启动时,它会尝试连接到最后一个已知网络。LCD 将显示“连接到 ”并显示进度指示器。如果连接成功,您会在 LCD 右上角看到信号强度指示器。连接错误时,会出现带有删除线 WiFi 的指示器。您仍然可以在没有 WiFi 的情况下使用体重秤,但只能在基本称重模式下使用。

网络配置门户

第一次使用时,如果您的 WiFi 或身份验证的 SSID 发生变化,您需要重新配置连接设置。您可以通过双击 Wemos R1 Mini 芯片的重置按钮来启动配置门户。打开体重秤后,您基本上需要以 5 秒的间隔按两次重置按钮。

进入该模式时,秤的标志 LED 灯会闪烁两次,并在屏幕上显示“ Configure me ”。

要使用配置门户,请连接到体重秤创建的公共“Healthzuilla-Scale”WiFI 网络。然后访问入口:http: //192.168.4.1

如果您不配置秤,则使用门户有 5 分钟的超时时间。

从配置门户中,您可以选择 SSID、设置密码和身份验证类型。每次更改设置时,都会打开 DHCP 客户端。您需要使用 API 通过将useStaticIP设置false和静态 IP 配置来禁用 DHCP。

之前的静态 IP 设置被禁用并启用 DHCP 以便能够连接到该网络,因为它可能与您已有的 IP 设置冲突。连接后,建议设置一个静态 IP,这样您就知道如何使用 API 访问秤。或者您可以指示路由器始终为秤的物理网络地址分配相同的 IP。

使用体重秤

体重秤开机后,当体重秤完成初始化,显示屏显示 0g 时,将物品放在绿色称重区。重量以 1 秒的间隔采样并显示在显示屏上。

要让秤同时显示体重和卡路里,请使用 API 发送食物信息。电子秤会实时显示食物名称、重量和卡路里。秤会记住食物,直到断电或您发送另一个食物信息。

去皮功能

例如,当一个空容器放在称重平台上时,去皮功能会重置秤显示器的零位,以便随后仅显示容器内容物的重量。这实际上是通过将当前秤上的内容归零来工作的,因此您可以在向同一接收者添加不同食物时使用此功能,但想要单独称重它们。

秤总是从去皮开始,所以如果你在开始秤之前放置一个空盘子,它会显示 0。

显示背光

LCD 背光根据环境照明自动控制。秤正面有一个传感器,在按钮按钮的左侧。

技术信息

 
20180822_220141_WdBpHXLNxS.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 

这个项目需要良好的焊接技能、一些创建更简单电路的背景、对电子学的基本了解以及一些 Arduino IDE 的经验。如果您是新手,我建议您先尝试一个更简单的项目,以掌握它的窍门。

电源电路

我建议在电池的正极线上安装一个机械开关,以防您想切断电池的电源。该电路依赖于一个软开关(一个按钮),因此秤能够自行关闭。仅使用机械开关,这是不可能的。

来自电池的电流由一个 47uF 大容量电解电容器 (C2) 和一个 100nF 去耦陶瓷电容器 (C1) 过滤,它们都与电池的输入并联 大容量电容器非常重要,因为它就像一个能量库对于饥饿的 esp8266 芯片,在启动时是必不可少的。esp8266 在启动时会产生 70-150 mA 的突发电流,并可能产生 300-400mA 的尖峰电流。结果,稳压器输入端的电压下降。如果电压下降太多,则可能会导致掉电。大容量电容器将平滑这些尖峰并避免稳压器输入端的电压下降,从而为稳压器提供能量缓冲。较小的陶瓷去耦电容器有助于消除 WiFi 操作产生的高频噪声,并在这些情况下提供更快的响应。

在稳压器输出端,即 HX711 和 LCD 输入端,使用了两个去耦陶瓷电容器,一个为 100nF (C4),另一个为 10nF (C5)。它们有助于隔离这些组件,尤其是应获得稳定电压的称重传感器放大器 (HX711),并且它们抑制试图覆盖更广泛频率范围的高频噪声,并在需要时提供即时能量储备。

软锁存电路采用1个P沟道场效应管(NDB6020P)-Q2,1个N沟道场效应管(2N7000)-Q1,2个10K电阻(R1和R2)。

您可以使用任何 P 通道逻辑电平 Mosfet 代替 NDB6020P,能够在 -3.3V 时提供至少 500mA 的电流。这个额定电流高达 24 安培,所以有点笨重,但没有更小的。您也可以用类似的 N 通道 Mosfet 甚至 NPN 晶体管替换 N 通道 Mosfet。如果换成三极管,通过10K电阻连接三极管的基极,限制基极电流。使用 Mosfet 的优点是功耗低得多,但它只在秤打开时消耗电流
 
latching-circuit_schem_7IeUicoAcO.png?auto=compress%2Cformat&w=740&h=555&fit=max
锁存电路原理图
 

Wemos D1 Mini 由用作开关的红色(左)按钮供电。一旦启动,它将数字引脚 GPIO16 设置为高电平,将 3.3V 馈入 N 沟道 Mosfet 栅极,从而使电流从漏极流向负侧的源极。Q1 的栅极被 R1 下拉,因此 FET 最初不导通。这使得 Q2 在漏极和源极之间导通,因为 Q2 的栅极现在被拉到地。Q2 是一个 P 沟道 Mosfet,工作方式相反——默认情况下它被 10K 电阻 R2 拉高,并且只允许电流在没有电压施加到它的栅极时流动。

微控制器可以通过将 GPIO16 设置为低电平,从 Q1 栅极移除电压,Q1 现在被 R1 拉低,从而中断到 Q2 栅极的接地路径,Q2 再次被 R2 拉高。

实体按键

秤有两个物理按钮。还有一个开关用于中断从电池到连接板的电源。

位于左侧的第一个按钮无法使用微控制器读取。它仅用作电源开关。微控制器上电后,该按钮没有任何作用。我更喜欢一种简单的方法,我通过一个按钮打开电源,然后通过软件或通过读取另一个按钮来关闭电源。您可以在长按时按下/关闭按钮,但需要更复杂的电路。

右侧的第二个按钮具有双重作用:

  • 长按关闭体重秤
  • 短按去皮重

与尝试重复使用“开”按钮相比,将开和关按钮分开对我来说更容易。

基本上只有第二个按钮被微控制器读取。为了区分短按和长按,我只存储按钮改变状态的时间,并测量是否有足够的时间考虑长按(3 秒)。您可以研究在 loop() 中执行的函数handleTareButton()中的代码。

秤校准

在做任何事情之前校准秤非常重要。为此,使用了所谓的校准因子如果您将秤置于校准模式,则此校准系数可由秤确定要将秤置于校准模式,请使用 HTTP API:

校准模式会要求您在秤上放置一个已知的重量。一旦检测到重量,它就会计算校准系数,应用它,将其保存到 EEPROM 中以备下次启动时再次使用。

已知重量设置为152g。这可能听起来很奇怪,但这实际上是我的三星 S7手机的重量。使用手机本身来校准秤非常方便。该值取自规格(我猜他们已经用校准秤测量了该值:))并且我通过称重几个硬币来确认校准正确。硬币也是可以作为校准砝码的东西,因为它们都有官方的重量,但是你需要一串硬币至少称重 50 克才能进行一种准确的校准。

阅读重量

为了测量重量,我们需要两个组件

  • LoadCell我使用的是直杆称重传感器,也称为应变计
  • LoadCell放大器我用的是HX711放大器模块

使用的这种直杆称重传感器的额定重量为 5 千克,这意味着它可以将高达 5 千克的压力(力)转化为电信号。称重传感器能够测量响应于应变(例如压力或力)并与其成比例变化的电阻。

有关称重传感器的更多信息。

为了能够读取这些微小的电阻波动,您需要非常精确且昂贵的仪器,或者像 HX711 这样的优质放大器,它可以将这些微小的变化转化为可读的内容。

读数应该非常准确,因为使用的称重传感器放大器 (HX711) 包含一个 24 位 ADC。要获得准确的结果,请确保秤具有稳定的底座。您可以使用橡胶腿。

从称重传感器上的惠斯通电桥引出的四根电线通常是:

  • 励磁+(E+)或VCC为红色
  • 励磁-(E-)或接地为黑色。
  • 输出+ (O+)、信号+ (S+)+ 或放大器+ (A+) 为白色
  • O-、S- 或 A- 为绿色或蓝色
从我使用的廉价秤中出来的白色和蓝色电线实际上是颠倒的,但我注意到这是因为它们在现有 PCB 上的标签。

我读过 HX711 在 5V 下工作得更好,但在 3.3V 下我得到了令人满意的结果。您的模块可能具有用于模拟和数字电源的专用电源输入,例如来自 Sparkfun 的模块。这种分离允许用 5V 为模拟部分供电,用 3.3V 为逻辑部分供电,因此您可以使用 3.3V 微控制器。我的模块没有这些选项。

关于使用 HX711 的 Sparkfun 教程。

标有DATDOUTCLK的引脚可以连接到任何数字引脚。我使用GPIO5作为DOUT GPIO4作为CLK。

使用的库应该负责通信。我使用bogde/HX711作为库,大多数人都在使用

经过几次试验,我能得出的最好的读取体重的算法是:

  • 在计时器中每秒读取一次刻度
  • 在每次读数时获取 7 个样本并使用平均值
  • 在权重稳定后使用移动平均算法,减少异常变化,提高准确性。移动平均线基于那些 1 秒读数的历史记录。

您可以研究函数readScale()中的代码

您可以使用 API 检索重量:

读取电池充电状态

锂离子电池的充电状态是根据电压计算的。我为不同的电压值组装了稳定的充电百分比。你会在网上找到不同的表格,或多或少准确,我所做的是查看锂离子电池数据表中的 SoC 与电压曲线,并尝试遵循它。可以通过研究代码 ( getLiPoBatteryLevel())找到转换表

您不能直接读取电池电压,但可以使用 ADC(模数转换)来获取已知间隔内的值。ADC 只能读取特定范围内的电压,因此如果读取电压高于 ADC 范围,则必须使用分压器将其缩小以适应范围。

ESP8266 有一个 10 位 ADC 引脚。1 伏特是内部 ADC 的最大输入,原始读数为 1023。Wemos D1 Mini 已经在 ADC 引脚上包含一个分压器。这是 100 k 电阻上的 220 k 电阻。只要电压低于 3.3V,您就可以将电池直接连接到裸露的 ADC 引脚。

 
wemosvoltagedivider_Ch8bul40jB.png?auto=compress%2Cformat&w=740&h=555&fit=max
WemosD1 Mini 内部分压器
 

但是充满电的电池的 4.2V 超出了裸露的引脚所能承受的范围。通过在电池正极端子和 ADC 引脚之间连接一个额外的 220k 电阻,由于存在分压器,我们将在暴露引脚上获得小于 3.3V 的电压,在 ESP8266 的 ADC 引脚上获得小于 1V 的电压。

通过添加一个 220k 电阻,实际上总电阻为 220k + 220k + 100k = 540k。因此,如果充满电的电池电压为 4.2 伏,则 ESP8266 的 ADC 将获得 4.2 * 100/540= 0.77 伏,当 ADC 为 1V 时允许输入电压高达 5.4V,因此输入引脚和 ADC将在过电压(施加直接 USB 电压)的情况下受到保护。

我在 ADC 引脚和地之间添加了一个 100nF 的陶瓷电容器,以平滑读数并降低噪声。我只是在草图开始时取了 1 个样本,然后将其乘以一个已知的校准因子,因为读数非常稳定。如果您的读数不同,您可以尝试使用更大的电容器,读取多个样本并取平均值。但是如果你有噪音,你应该首先检查连接并确保你有短线(如 10cm)以最小化电感。

诺基亚5110 显示屏

这些旧显示器仍然在那里。诺基亚 5110 LCD 是一个 84 x 48 像素的单色显示器,它很便宜并且可以很容易地与 Adafruit GFX 库一起使用。它可以让您显示文本、形状和单色图像。它还具有 LED 背光。在没有背光的情况下,它仅消耗 6-7 毫安。

LCD 需要从 2.7 - 3.3V 供电。背光由 4 个 LED 组成。我不能让那些 LED 在我的模块中消耗超过 20mA。它可以有一个限流电阻,或者它们可以有更高的正向电压。一些模块声明它们可以使用高达 100mA 的电流,这确实是可能的,因为典型的白色 LED 可以消耗 30mA,所以看到背光消耗 120mA 我不会感到惊讶。与显示器所需的 6-7mA 相比,您应该注意这一点。这就是为什么在电池供电的设备上我只会在需要时打开背光灯。

我看到一些模块要求 LED BLT 引脚为逻辑低电平。这就是为什么您应该始终阅读数据表,如果它直接需要电源,请始终放置一个限流电阻。例如,为了安全起见,我使用了一个 22 欧姆的电阻器。

此 LCD 中内置了飞利浦 PCD8544 显示控制器,可将原始 LCD 的大量并行接口转换为更方便的串行接口。PCD8544 通过类似于SPI 的同步串行接口进行控制。有时钟 ( SCLK ) 和数据 ( DN ) 输入线,以及低电平有效的片选 ( SCE ) 输入。

在这三个串行线之上,还有另一个输入——D/ C——它告诉显示器它接收的数据是命令还是可显示数据。

对于数据传输引脚——SCLK 和 DN(MOSI)——我使用了 Arduino 的硬件SPI 引脚,这将有助于实现更快的数据传输。片选(SCE)接地,复位(RST)通过一个10K的电阻连接到Wemos R1 Mini复位管脚,以便微控制器复位时复位显示。数据/命令 (D/C) 引脚可以连接到任何数字 I/O 引脚,因此我使用了通常用于 SPI MISO 的GPIO12 ,未使用,在 D1 Mini上标记为D6

Sparkfun 创建了一个关于使用此 LCD 的精彩教程。

汽车液晶背光

由于背光 LCD 可能很耗电并且并不总是需要,我创建了一个电路来根据光照条件调整背光。

我使用的自动背光电路由一个 NPN 晶体管、一个 LDR(光敏电阻)和两个电阻组成。使用的NPN三极管为2N3904 ,可提供200mA电流。由于所需的电流很低,您有很多选择可以用任何 NPN 晶体管替换它。在此设置中,NPN 没有像通常用作低侧开关那样使用,而是用作高侧开关。由于 BLT 引脚需要正电压才能打开,因此无法在低端使用它(负馈电),因为接地已经连接到模块上

没有LDR,电路使背光完全点亮。使用 LDR,晶体管基极将获得或多或少的电流,这取决于 LDR 获得多少光,因为 LDR 电阻随着光从黑暗中的非常高的电阻降低到光线中的非常低的电阻。晶体管基极在光照环境下会获得非常低的电流,因为大部分电流会流过 LDR 的电阻较小的路径,因此从集电极到发射极(3.3V 到 BLT 引脚)的电流会很低,并且背-光线会非常暗或关闭。在较暗的环境中,LDR 电阻增加,允许更多电流到达晶体管的基极,从而允许更多电流从集电极传输到发射极(3.3V 到 BLT 引脚)并点亮LED。

我选择了从 3.3V 到晶体管基极的固定 1K 电阻,以及从发射极到 BLT 的 22ohms 保护电阻。保护并不是真正必要的,但始终建议在 LED 之前使用电阻器。

标志灯

每个产品都需要一个标志,还有什么比发光标志更漂亮的呢?

为此,我只是Wemos D1 Mini上使用了标记为D3的GPIO 0 ,当徽标应点亮时将其设置为高电平,当徽标应关闭时将其设置为低电平。我还使用 PWM 和 analogWrite 将其调暗。当然,我加了一个几欧的保护电阻(我实际用的是1.2ohm,但是如果你不确定led的正向电压,我推荐一个更大的,比如22ohm)来保证led的安全。

GPIO 0 是 ESP8266 的一个特殊引脚,用于启动过程,因此它在启动时始终为高电平,但这完全没问题。启动后,您可以将其用作输出并随心所欲地使用它。

图书馆

API参考

RESTful HTTP API 可在http://healthzuilla-scale.local/api/或通过 IP 在http://

healthzuilla-scale.local由于秤上安装了 mDNS 响应器,因此可以正常工作。有些设备可能无法识别此主机名,例如 Android 设备,因为它们缺乏 mDNS 支持。在这种情况下,使用 IP 地址
不支持 SSL
在 v 2022.2 中尝试使用自签名的 2048 位证书,但事实证明即使在 160 Mhz 时钟下,这对于 ESP8266 芯片来说也太慢了。所以此更改已在 v 2022.3 中恢复

API 接收表单编码的输入参数。卷曲示例:

curl -XPATCH /api/settings --data "useStaticIP=1&ip=192.168.1.11"

成功的 POST/PATCH 操作返回 HTTP 状态代码 200 和如下所示的 JSON:

{"success": true}

失败的请求返回一个非 200 的 HTTP 状态代码和一个带有两个键的 JSON 对象:

  • 错误:bool (始终为真)
  • 消息:字符串

例子:

{"error": "true", "message": "Invalid voltage. Must be between 3 - 4.35v"}

以下所有路径均与秤 IP 地址相关。

设备接口

检索信息

GET /api/device/info

示例响应:

{
	"battery":{
		"voltage":4.09,
		"chargeLevel":90
	},
	"network":{
		"deviceMac":"84:F3:EB:B3:86:75",
		"ip":"192.168.1.11",
		"subnetMask":"255.255.255.0",
		"gateway":"192.168.1.1",
		"dnsIP":"192.168.1.1",
		"SSID":"tplink-est",
		"BSSID":"64:66:B3:64:1D:A9",
		"signalStrength":-71
	}
}

校准ADC

POST /api/device/calibrate-adc

校准内部 ADC 以读取电池电压。为此,您需要将测得的电池电压作为参数发送。

必需的参数:

  • 电压值必须介于 3 和 4.35 之间float

关机_

POST/api/device/poweroff

重置

POST/api/device/reset

确保在进行软重置时按住电源按钮,否则它会在重置过程中自行断电。如果您正在使用插入 Wemos D1 Mini 的 USB 电缆调试体重秤,这仅在不按下按钮的情况下有效。

设置接口

检索设置

GET /api/settings

示例响应:

{
	"useStaticIp":true,
	"ip":"192.168.1.11",
	"gateway":"192.168.1.1",
	"subnetMask":"255.255.255.0",
	"zeroFactor":131702,
	"calibrationFactor":414.19,
	"calibrationWeight":152.00,
	"powerOffTimerSec":300,
	"idlePowerOffTimerSec":90,
	"voltageCalibrationFactor":0.005226
}

带有 curl 的示例请求:

$ curl -XPATCH http://192.168.1.11/api/settings --data "useStaticIp=1&ip=192.168.0.10"

更改设置

PATCH /api/settings

比例函数 API

校准

POST /api/calibrate

启动交互式校准模式。秤会要求您放置一个已知的重量,然后它会自动校准。

检索上次设置的食物 ID 的重量

GET /api/weight

回复:

{
   “foodId”:123,
   “weight”:90.5,
   “unit”:“g”
}

设置食物信息

POST/api/weight

必需的参数:

  • foodIdstring一个唯一的 id 来识别这个食物
  • 名称string在秤 LCD 上显示的食物名称
  • 卡路里热量float/100g

样品要求:

curl -XPOST http://192.168.1.11/api/weight --data "foodId=123&name=Banana&calories=89.2"

皮重

POST /api/tare


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !