电路设计论坛
直播中

京五环以外

10年用户 3212经验值
擅长:EMC/EMI设计
私信 关注
[资料]

带Qubitro的物联网书签和阅读跟踪器

描述
带 qubitro 的物联网书签和阅读(图书评级)跟踪器

在阅读书籍或漫画时,我喜欢每天记录我的收视率,以跟踪我对每一章的兴趣的激增或下降。此外,我可以在阅读完书籍后仔细检查我的评分和笔记,从而轻松地复习书籍。

由于我总是将我的评分记录在笔记本或一张纸上,因此我的家庭图书馆被不请自来的纸堆淹没了。因此,我决定创建这个物联网设备来记录和监控我的图书评分,从而避免手写的需要。

在仔细阅读书评和分类方法后,我决定使用这个设备来评价和记录六种不同的书籍特征,这些特征表示一本书的质量和可靠性:

  • 阴谋
  • 划定
  • 浸没
  • 罗唆
  • 人物
  • 编辑

对于上述每个特征,我定义了四个不同的评分点,以使用收集的数据创建一个简洁且连贯的评分系统:

  • 1 世俗的
  • 2  有趣的
  • 3 迷人
  • 4 迷人的

在定义我的评级系统后,我决定使用 RFID 磁盘标签来识别书籍,而不是使用条形码扫描仪扫描条形码 (ISBN),因为我想为每本书设计带有 RFID 磁盘标签的独特书签。因此,我将 MFRC522 RFID 阅读器连接到 Arduino Nano 33 IoT 以检测 UID。

为了显示评级设置菜单,我将 SH1106 OLED 屏幕连接到 Nano 33 IoT。然后,我创建了一个简单的控制器,用操纵杆和按钮调整每个特性的评级。

我没有从头开始开发 Web 应用程序来记录和监控 Nano 33 IoT 传输的上述图书评级,而是决定利用 Qubitro 门户构建一个 IoT 应用程序。由于 Qubitro 支持与不同开发板的各种连接方法,并提供易于理解的界面来可视化接收到的云端数据包,因此我在为这个项目构建 IoT 应用程序时没有遇到任何问题。

在完成面包板上的接线并测试将数据包传输到 Qubitro 应用程序的代码后,我为这个项目设计了蝙蝠侠主题的底座和控制器 PCB。最近在看《蝙蝠侠:动画系列》的时候,在蝙蝠洞里看到了一个以蝙蝠为主题的图书馆。由于蝙蝠侠是我最喜欢的漫画人物,我认为将这个设备设计成蝙蝠洞图书馆的一部分会很有趣。

最后,我还设计了一个以蝙蝠侠为灵感的补充书架(可 3D 打印),以插入底座和控制器 PCB,以创建一个坚固而时尚的设备,光荣地强调蝙蝠侠主题 :)







第 1 步:设计和焊接蝙蝠侠主题的底座和控制器 PCB
在对我的蝙蝠侠主题底座和控制器 PCB 设计进行原型设计之前,我使用 Arduino Nano 33 IoT 和 MFRC522 RFID 阅读器测试了所有连接和接线。



然后,我利用 KiCad 设计了蝙蝠侠主题的底座和控制器 PCB - 灵感来自黑暗骑士的传说 :) 我附上了下面两个 PCB 的 Gerber 文件。因此,如果您愿意,您可以从 PCBWay 订购我的 PCB 设计,以创建您的支持 RFID 的物联网书签和阅读跟踪器,从而轻松地将您的图书评级传输到 Qubitro 应用程序。









首先,通过使用烙铁,我将接头(母头)、COM-09032 模拟操纵杆、按钮(6x6)、5 毫米绿色 LED 和电源插孔连接到底座和控制器 PCB。

基板PCB上的元件清单:

A1(Arduino Nano 33 IoT 接头)
RFID1(MFRC522 RFID 阅读器的接头)
SH1106(SH1106 OLED 显示器接头)
J1(控制器 PCB 接头)
D1 (5mm 绿色 LED)
J2(电源插孔)

控制器 PCB 上的组件列表:

J1(基板 PCB 接头)
U1、U2(COM-09032 模拟操纵杆)
K1、K2、K3、K4(6x6 按钮)







步骤 1.1:进行连接和调整
// 连接
// Arduino Nano 33 IoT :
// MFRC522
// D3 --------------------------- RST
// D4 --- ---------------------- SDA
// D11 ---------- ----- MOSI
// D12 --------------- MISO
// D13 ---------- ----------------- SCK
// SH1106 OLED 显示屏 (128x64)
// D6 --------- ------ SDA
// D5 --------------- SCK
// D7 --------- ------------------ RES
// D8 --------------- DC
// D9 --------------- CS
// 操纵杆 (R)
// A0 ---------- ----------------- VRY
// A1 --------------------------- VRX
// A2 ---------------- ----------- SW
// 操纵杆 (L)
// A3 --------------------------- VRY
/ / A4 --------------------------------------- VRX
// A5 ----- ---------- SW
// 按钮(向上)
// A6 ---------------------------- S
//按钮(右)
// A7 --------------- S
// 按钮(左)
// D2 ------ --------------------- S
// 按钮(向下)
// D10 -------------------- -------- S
// 5mm 绿色 LED
// D0 --------------------------- +

完成焊接后,我通过接头将所有剩余组件连接到蝙蝠侠主题的底座和控制器 PCB - Arduino Nano 33 IoT、MFRC522 RFID 阅读器和 SH1106 OLED 屏幕。

然后,我使用公跳线将基础 PCB 连接到控制器 PCB。



第 2 步:设计和打印受蝙蝠侠启发的书架

由于我想应用蝙蝠主题来创建一个设备,就好像它是动画系列中蝙蝠洞的一部分一样,我决定设计一个补充书架来展示我目前在我的家庭图书馆阅读的书籍。为了毫不费力地将蝙蝠侠主题的底座和控制器 PCB 插入并连接到书架上,我添加了插槽和挂钩。另外,我在书架上刻了突出的蝙蝠符号,以光彩地强调蝙蝠侠主题:)

我在 Autodesk Fusion 360 中设计了书架。您可以在下面下载它的 STL 文件。




然后,我在 Ultimaker Cura 中对我的书架 3D 模型(STL 文件)进行了切片。



由于我想为书架创建一个坚固的结构并补充蝙蝠侠主题,我使用了这种 PLA 灯丝:

  • 黑色的

最后,我用我的 Creality CR-6 SE 3D 打印机打印了书架(模型)。虽然我是 3D 打印的新手,而且它是我的第一台 FDM 3D 打印机,但我使用 CR-6 SE 毫不费力地获得了令人难以置信的结果 :)



步骤 2.1:组装书架并创建 RFID 书签
打印我的书架 3D 模型后,我将蝙蝠侠主题的底座和控制器 PCB 固定在书架上。我通过前面的挂钩放置了控制器 PCB。然后,我通过热胶枪将基础 PCB 固定在其顶部的插槽中,并使用电缆扎带进行牢固稳定的连接。















由于我决定使用 RFID 磁盘标签来创建独特的书签以识别书籍,因此我将磁盘标签固定在我从家乡的漫画书展上购买的限量版漫画书签上。





第 3 步:在 Qubitro 上设置 IoT 应用程序
为了记录和监控 Nano 33 IoT 传输的图书评分,我决定利用 Qubitro 门户构建一个 IoT 应用程序。Qubitro 提供对开发人员友好的功能并支持各种连接方法,例如功能齐全的 MQTT 代理和 The Things Stack 设备。由于 Qubitro 具有易于理解的 在线示例和技术指南 ,并允许用户使用专门的小部件轻松地在云上可视化接收到的数据包,我强烈建议使用 Qubitro 构建物联网应用程序。

首先,转到 Qubitro 门户 并登录。




然后,创建一个新项目(IoT 应用程序)并定义其名称和描述。





要在应用程序下创建新的 Qubitro 设备,请根据您的项目要求选择连接方法。选择 MQTT 选项以通过 Qubitro MQTT 代理将数据传输到给定的 Qubitro 设备。



定义设备信息和详细信息。



如果需要,您还可以使用应用程序的 MQTT 凭据通过 Qubitro API 发布数据。




成功创建 Qubitro 设备后,在项目仪表板上打开该设备,然后单击设置。



然后,复制设备 ID 和令牌以通过 MQTT 代理将数据包从 Nano 33 IoT 传输到 Qubitro 设备。



步骤 3.1:分析在 Qubitro 上收集的数据
在 Qubitro 上构建我的 IoT 应用程序后,我立即开始通过 MQTT 代理从 Nano 33 IoT 向应用程序下的 Qubitro 设备发送数据包(书籍评分)。

为了分析收集到的数据,我利用了设备界面中的内置图表功能。

您可以在第 4 步中检查通过 Qubitro MQTT 代理传输图书评级的代码。

Qubitro 设备收到数据包后,在项目仪表盘上打开设备,点击分析。





然后,为每个数据元素创建一个具有唯一颜色的图表,以仔细检查给定时期内收集的数据。






步骤 3.2:创建小部件以可视化 Qubitro 上收集的数据
首先,在项目仪表盘上,进入监控,创建一个新的监控仪表盘。



然后,单击添加小部件按钮。


定义小部件所需的信息:标题、项目(IoT 应用程序)名称、设备名称和小部件类型(例如,面积图)。





要自定义最近创建的小部件,请分配数据元素(传感器值),选择小部件颜色并调整外观设置。



为每个数据元素创建小部件后,Qubitro 门户应显示如下监控仪表板。




第 4 步:对 Arduino Nano 33 IoT 进行编程
首先,我需要安装 SAMD21 内核以在 Arduino IDE 上设置 Arduino Nano 33 IoT。


在 Arduino IDE 上,导航到 Tools > Board > Boards Manager。



然后,搜索 Arduino SAMD Boards(32 位 ARM Cortex-M0+)内核并安装它。




转到工具 > 板 > Arduino SAMD 板(32 位 ARM Cortex-M0+)以选择 Arduino Nano 33 IoT。



成功设置 Nano 33 IoT 后,下载所需的库以通过 Qubitro MQTT 代理传输数据包:


包括所需的库。

#include
#include
#include
#include
#include
#include
#include

启动 Wi-Fi 和 Qubitro MQTT 客户端。
定义 Wi-Fi 设置。
定义 Qubitro 设备设置和信息(ID 和令牌)。

WiFiClient wifiClient;
QubitroMqttClient mqttClient (wifiClient) ;

// 定义 Wi-Fi 设置。
字符ssid[] = "<_SSID_>" ;
字符pass[] = "<_PASSWORD_>" ;

// 定义 Qubitro 设备设置和信息。
char deviceID[] = "<_DEVICE_ID_>" ;
char deviceToken[] = "<_DEVICE_TOKEN_>" ;
char host[] = "broker.qubitro.com" ;
int端口 = 1883 ;

定义 SH1106 OLED 屏幕设置。

#define SCREEN_WIDTH 128 // OLED 显示宽度,以像素为单位
#define SCREEN_HEIGHT 64 // OLED 显示高度,以像素为单位
#define OLED_MOSI 6
#define OLED_CLK 5
#define OLED_DC 8
#define OLED_CS 9
#define OLED_RST 7

// 创建 SH1106 OLED 屏幕。
Adafruit_SH1106G 显示 = Adafruit_SH1106G(屏幕宽度,屏幕高度,OLED_MOSI,OLED_CLK,OLED_DC,OLED_RST,OLED_CS);

创建 MFRC522 实例并定义 MFRC522 模块键输入。

#define RST_PIN 3
#define SS_PIN 4
MFRC522 mfrc522 (SS_PIN, RST_PIN) ;

// 定义 MFRC522 模块按键输入。
MFRC522::MIFARE_Key 密钥;

初始化 SH1106 OLED 屏幕。

display.begin(0, true);
显示.显示();
延迟(1000);

display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SH110X_BLACK, SH110X_WHITE);
display.setCursor(0,0);
display.println("物联网");
display.println("书签");
显示.显示();
延迟(1000);

连接到给定的 Wi-Fi 网络。

Serial.println( "正在连接 Wi-Fi 网络..." );
而(WiFi.begin(ssid,通过)!= WL_CONNECTED){
Serial.print( "." );
延迟(1000);
}
Serial.println( "已连接到 Wi-Fi 网络!" );

设置 Qubitro 设备 ID 和令牌以进行身份​​验证。
通过 Qubitro MQTT 代理连接到 Qubitro 设备。

mqttClient.setId(设备ID);
mqttClient.setDeviceIdToken(deviceID, deviceToken);
Serial.println( "正在连接 Qubitro 设备..." );

// 通过 Qubitro MQTT 代理连接到 Qubitro 设备.if(!mqttClient.connect(host, port)){
Serial.println( "Qubitro: Connection failed! Error code => " );
Serial.println(mqttClient.connectError());
而( 1 );
}
Serial.println( "连接到 Qubitro 设备!" );

激活与 Qubitro 设备的双向通信以获取服务器响应(收到的消息)的通知。

mqttClient.onMessage(receivedMessage);
mqttClient.subscribe(设备ID);

初始化 MFRC522 RFID 阅读器(硬件)。

SPI.开始();
mfrc522.PCD_Init();
Serial.println("
---------------------------------
近似新卡或密钥标签:
----------------------------------
");

在 read_UID 函数中,检测新的 RFID 卡或标签 UID。
然后,将检测到的 UID 复制到 lastRead 字符串,处理 lastRead 字符串,并在串口监视器上打印。

int  read_UID ()  {
// 检测新卡或标签 UID。if (!mfrc522.PICC_IsNewCardPresent()) {
return  0 ;
}
if (!mfrc522.PICC_ReadCardSerial()) {
return  0 ;
}

// 在串口监视器上显示检测到的 UID。
Serial.print( "
---------------------------------
新卡或密钥标签 UID:" );
for ( int i = 0 ; i < mfrc522.uid.size; i++) {
lastRead += mfrc522.uid.uidByte < 0x10?“0”:“”;
lastRead += String(mfrc522.uid.uidByte, HEX);
}
lastRead.trim();
lastRead.toUpperCase();
Serial.print(lastRead);
Serial.print( "
---------------------------------

" );
mfrc522.PICC_HaltA();
返回 1 ;
}


保持与 Qubitro 代理的 MQTT 连接。

mqttClient.poll();

如果检测到并存储了 RFID 卡或标签 UID,则启动评级设置菜单:
在 SH1106 OLED 屏幕上显示检测到的 UID 和当前图书评分。
然后,利用操纵杆(第一和第二)移动和控制按钮(上、右、左和下)调整图书评级。

如果按下第二个操纵杆的开关,则创建一个 JSON 格式的字符串,以将检测到的 UID 和调整后的图书评分传输到 Qubitro 设备:

  • 用户标识符
  • 阴谋
  • 划定
  • 浸没
  • 罗唆
  • 人物
  • 编辑

然后,通过 Qubitro MQTT 代理将给定的数据包发送到 Qubitro 设备。
最后,返回主屏幕并清除 lastRead 字符串(检测到的 UID)。
如果按下第一个摇杆的开关,则返回主屏幕并清除 lastRead 字符串(检测到的 UID)而不发送数据包。

如果(最后阅读!= “”){
uid_activated = true ;
//如果检测到RFID 卡或标签,打开评级设置菜单。而(uid_activated){
读取控制();
mqttClient.poll();
display.clearDisplay();
显示.setTextSize( 1 );
display.setTextColor(SH110X_WHITE);
display.setCursor( 0 , 5 );
展示。打印(“UID:”);display.println(lastRead);
展示。打印(“情节:”);display.println(选项[ 0 ]);
展示。打印(“划定:”);display.println(选项[ 1 ]);
展示。打印(“沉浸:”);display.println(选项[ 2 ]);
展示。打印(“冗长:”);display.println(选项[ 3 ]);
展示。打印(“字符:”);display.println(选项[ 4 ]);
展示。打印(“编辑:”);display.println(选项[ 5 ]);
显示.显示();
延迟(150);
//使用操纵杆和控制按钮调整图书评分: if (joystick_x_1 >= 850 ){ if (!up) options[ 0 ] = 1 ; if (!right) 选项[ 0 ] = 2 ; if (!left) 选项[ 0 ] = 3 ; if (!down) 选项[ 0 ] = 4 ; }
if (joystick_x_1 <= 150 ){ if (!up) options[ 1 ] =1 ; if (!right) 选项[ 1 ] = 2 ; if (!left) 选项[ 1 ] = 3 ; if (!down) 选项[ 1 ] = 4 ; }
if (joystick_y_1 >= 850 ){ if (!up) options[ 2 ] = 1 ; if (!right) 选项[ 2 ] = 2 ; if (!left) 选项[ 2 ] = 3 ; if (!down) 选项[ 2 ] = 4 ; }
if (joystick_x_2 >= 850 ){ if (!up) options[ 3 ] = 1 ; if (!right) 选项[ 3 ] = 2 ; if (!left) 选项[ 3 ] = 3 ; if (!down) 选项[ 3 ] = 4 ; }
if (joystick_x_2 <= 150 ){ if (!up) options[ 4 ] = 1 ; if (!right) 选项[ 4 ] = 2 ; if (!left) 选项[ 4 ] =3;if (!down) 选项[ 4 ] = 4 ; }
if (joystick_y_2 >= 850 ){ if (!up) options[ 5 ] = 1 ; if (!right) 选项[ 5 ] = 2 ; if (!left) 选项[ 5 ] = 3 ; if (!down) 选项[ 5 ] = 4 ; }
//通过 Qubitro MQTT 代理将给定的图书评级发送到 Qubitro 设备。如果(!joystick_sw_2){
digitalWrite(control_led, HIGH);
mqttClient.beginMessage(deviceID);
//创建一个 JSON 格式的字符串,成功传输数据到 Qubitro 设备。
mqtt客户端。print ( "{"UID":"" + lastRead + "","plot":" + String(options[ 0 ]) + ","delineation":" + String(options[ 1 ]) + ","沉浸":" + String(options[ 2 ]) + ","prolixity":" + String(options[ 3 ]) + ","characters":" + String(options[ 4 ]) + ","编辑":" + String(options[ 5 ]) + "}" );
mqttClient.endMessage();
延迟(3000);
Serial.println( "消息发送!" );
//退出并清除:
最后读取 = "" ;
display.clearDisplay();
显示.setTextSize( 2 );
display.setTextColor(SH110X_BLACK, SH110X_WHITE);
display.setCursor( 0 , 0 );
display.println( "物联网" );
display.println( "书签" );
显示.显示();
数字写入(控制LED,低);
uid_activated = false ;
}

//退出并清除:if (!joystick_sw_1){
最后读取 = "" ;
display.clearDisplay();
显示.setTextSize( 2 );
display.setTextColor(SH110X_BLACK, SH110X_WHITE);
display.setCursor( 0 , 0 );
display.println( "物联网" );
display.println( "书签" );
显示.显示();
uid_activated = false ;
}
}
}













模式和功能
首先,设备尝试通过 Qubitro MQTT 代理连接到给定的 Wi-Fi 网络和 Qubitro 设备。

然后,设备显示主屏幕。




如果设备检测到 RFID 卡或标签 UID,它会启动评级设置菜单并显示检测到的 UID 和当前图书评级:

  • 用户标识符
  • 阴谋
  • 划定
  • 浸没
  • 罗唆
  • 人物
  • 编辑



在评级设置菜单上,该设备允许用户通过操纵杆移动和控制按钮来调整图书评级:

要调整绘图等级:

  • 将第一个操纵杆向右移动按任意控制按钮

要调整描述等级:

  • 将第一个操纵杆向左移动按任意控制按钮

调整沉浸等级:

  • 将第一个操纵杆向上移动 按任意控制按钮

要调整 Prolixity 等级:

  • 向右移动第二个操纵杆按任意控制按钮

要调整字符等级:

  • 将第二个操纵杆向左移动按任意控制按钮

调整编辑等级:

  • 将第二个操纵杆向上移动按任意控制按钮

通过控制按钮评分:

  • 向上按钮世俗 [1]
  • 右键有趣 [2]
  • 左键 迷人 [3]
  • 向下按钮迷人 [4]



如果按下第二个操纵杆的开关,设备将通过 Qubitro MQTT 代理将数据包(检测到的 UID 和调整的图书评级)发送到 Qubitro 设备。


然后,如果 Qubitro 设备成功接收到传输的数据包,设备会闪烁 5mm 的绿色 LED。





发送数据包后,设备返回主屏幕。

如果按下第一个摇杆的开关,设备也会返回主屏幕而不传输数据包。



设备存储调整后的图书评级,并在启动时显示在评级设置菜单中,以提醒用户之前分配的图书评级。



如果 Nano 33 IoT 在运行时出现错误,设备会在串行监视器上打印错误代码和详细信息。

此外,该设备还会在串行监视器上打印通知和 UID 读数以进行调试。


将数据包传输到 Qubitro 设备后,Qubitro 门户允许用户在监控仪表板上可视化图书评级,如步骤 3.2 中所述。





视频和结论
就我的实验而言,该设备在调整图书评级并通过 Qubitro MQTT 代理将数据包传输到 Qubitro 设备时工作得无可挑剔:)





更多回帖

发帖
×
20
完善资料,
赚取积分