# pi-raman-handheld-instrument **Repository Path**: sumght/pi-raman-handheld-instrument ## Basic Information - **Project Name**: pi-raman-handheld-instrument - **Description**: pi-raman-handheld-instrument - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-06-30 - **Last Updated**: 2023-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 手持拉曼仪器项目 ## 接口说明 ### 一.物品类 - 初始化类时会自动检测根目录并创建items.json用于保存每一个物品。 - 结构体Item构造 ``` struct Item { QString barcode;//一维码 QString itemName;//物品名称 QString methodName;//方法名称 QDateTime creationTime;//生成时间 QString createdBy;//生成用户 int lightIntensity;//光强 int integrationTime;//积分时间 int integrationCount;//积分次数 QVector displacement;//位移 }; ``` 1. `bool createItem(const Item& item);`创建一个新物品,输入item结构体,创建成功输出true,失败false 2. `Item getItem(const QString& barcode);`通过一维码获取物品信息,输出item结构体 3. `Item getItemByUser(const QString& barcode, const QString& username);`比起上一个获取,增加了角色权限,必须要与物品创建用户一致才能查询 4. `QVector getAllItems();`获取所有的物品,返回一个QVector数组 5. `bool deleteItem(const QString& barcode);`通过一维码删除物品,成功输出true,失败false 6. `bool deleteItemsByUser(const QString& username);`通过用户名删除该用户名创建的所有物品,成功输出true,失败false(适用场景,管理员删除某个用户时) 7. `bool checkItemExists(const QString& barcode);`通过一维码检测某个物品是否存在,存在输出true,不存在false ### 二.角色类 - 角色分为管理员与普通用户,初始化类时会自动检测根目录并创建users.json用于保存用户。 - 结构体User构造 ``` struct User { QString username;//用户名 QString password;//密码 QString lastLoginTime;//上次登陆时间 int permissions;//权限 }; ``` 1. `bool createUser(const QString& username, const QString& password);`创建用户,输入用户名和密码,创建成功返回true 2. `User login(const QString& username, const QString& password);`登录,输入用户名和密码,登陆成功返回user结构体,并更新最后登陆时间 3. `QString getLastLoginTime(const QString& username);`获取某用户的最后登陆时间并返回 4. `bool checkUserExists(const QString& username);`检查用户是否存在,输入用户名,存在则返回true 5. `std::vector getAllUsers();`获取全部用户,返回一个vector数组 ### 三.检测方法类 - 初始化类时会自动检测根目录并创建methods.json用于保存每一个方法。 - 结构体Item构造 ``` struct Item { struct Method { QString methodName;//方法名称 QDateTime creationTime;//生成时间 QString createdBy;//生成用户 int lightIntensity;//光强 int integrationTime;//积分时间 int integrationCount;//积分次数 }; ``` 1. `bool createMethod(const Method& item);`创建新方法,创建成功输出true,失败false 2. `QVector getAllItems();`获得所有的方法,返回QVector数组 3. `bool deleteMethod(const QString& methodName);`根据方法名字删除方法,删除成功输出true,失败false 4. `bool checkMethodExists(const QString& methodName);`检查方法是否存在,输入方法名,存在则返回true ### 四.硬件管理类 - 负责硬件调用 - 跨平台调试时请先将PI.pro文件中30行LIBS += -lwiringPi -ldl注释掉(默认注释掉了的) - 如海SDK需要安装如海驱动,具体参照如海SDK文档 - 树莓派驱动基于 安装方法(仅可在linux下安装,暂时注释了整个库) ``` 克隆WiringPi存储库:在Git Bash终端中运行以下命令来克隆WiringPi存储库: git clone https://github.com/WiringPi/WiringPi cd WiringPi ./build gpio -v 如果安装成功,应该会显示WiringPi的版本信息。 ``` 1. `int Steer(int angle);`控制舵机,输入角度即可 2. `char* ScanQRCode();`扫码二维码,返回字符串 3. 光谱部分,如设定积分时间,开关激光,检测和返回数据等,查询ruhai.cpp文件,直接调用os库的函数即可 ### 树莓派上QT环境安装 1. `sudo apt-get update` 2. `sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools` 3. `sudo apt-get install qtcreator` 4. `sudo apt-get install qtdeclarative5-dev` 5. `apt-get install libqt5serialport5-dev` 6. 根据树莓派系统位数选择`sudo apt-get install libqt5charts5-dev`,`sudo apt-get install libqt5charts5-dev/10.1 5.12.8-0kylinlkl arm64` ### 在树莓派上运行时软件部分 1. QT6以下取消methoddevelop.h 和 testing.h 中的 QT_CHARTS_USE_NAMESPACE 2. 将PI.pro文件中30行LIBS += -lwiringPi -ldl取消注释 3. 将hardwaremanager.h和hardwarmanager.cpp取消注释 ### TIPS 1. (mainwidget.cpp)电池电量显示:MainWidget::on_progressBar_valueChanged(int value) 通过connect将硬件获取数据并更新的信号以及信号值传递给该页面,然后将相应的数据传递给on_progressBar_valueChanged(int value); ``` //测试:假如当前电量为百分比55% on_progressBar_valueChanged(55); ``` 2. (testing.h testing.cpp)扫描二维码的传入数据接口:Testing::on_scanQRcode_clicked() 先在testing.h中取消//#include 的注释 再在testing.cpp文件的void Testing::on_scanQRcode_clicked()函数中 将//barcode = HardwareManager::ScanQRCode();//扫码二维码,返回字符串,为创建的item写入barcode 取消注释 再将barcode = ui->lineEdit->text();//暂时替代 加上注释 最后将Testing的ui页面中对应的lineEdit删掉即可 3. WiFi连接:Settings::on_confirm_clicked() 4. (methoddevelop.cpp)方法开发生成图像:void MethodDevelop::on_confirm_clicked() 在void MethodDevelop::on_confirm_clicked()函数中, QString array = ui->vector->text();获取第一个数组的序列,空格划分,请把ui->vector->text()换为硬件提供的数据, QString array2 = ui->vector2->text();获取第二个数组的序列,空格划分,请把ui->vector2->text()换为硬件提供的数据。 5. (testing.cpp)测试页面生成图像(同时录入Item):void Testing::on_start_clicked() 在void Testing::on_start_clicked()函数中, QString array = ui->vector->text();获取第一个数组的序列,空格划分,请把ui->vector->text()换为硬件提供的数据, QString array2 = ui->vector2->text();获取第二个数组的序列,空格划分,请把ui->vector2->text()换为硬件提供的数据. 6. 该程序只能在QT5上跑,因为QT6废弃了QNetworkConfigurationManage 7. wifi连接使用的是nmcli,树莓派需要按照`https://www.codeprj.com/blog/da935c1.html`进行配置。