Commit e285d9bc authored by 957dd's avatar 957dd

Merge branch 'feature/car-verify' into 'master'

Feature/car verify See merge request !45
parents 2a761b47 c380ff23
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.10)
project(DeviceControlSystem project(DeviceControlSystem
VERSION 1.1.7 VERSION 1.1.8
LANGUAGES C LANGUAGES C
) )
...@@ -8,10 +8,6 @@ project(DeviceControlSystem ...@@ -8,10 +8,6 @@ project(DeviceControlSystem
string(TIMESTAMP BUILD_TIMESTAMP) string(TIMESTAMP BUILD_TIMESTAMP)
set(BUILD_USER $ENV{USER}) set(BUILD_USER $ENV{USER})
# 调试信息,确认路径
message(STATUS "CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")
message(STATUS "Trying to configure file: ${CMAKE_CURRENT_SOURCE_DIR}/include/version.h.in")
# 配置版本文件 # 配置版本文件
configure_file( configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/include/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/include/version.h.in
...@@ -20,7 +16,7 @@ configure_file( ...@@ -20,7 +16,7 @@ configure_file(
# 添加生成的头文件目录 # 添加生成的头文件目录
include_directories( include_directories(
${CMAKE_CURRENT_BINARY_DIR}/include # 添加这行 ${CMAKE_CURRENT_BINARY_DIR}/include
include include
device_judg/device device_judg/device
device_judg/judg device_judg/judg
...@@ -46,17 +42,25 @@ file(GLOB_RECURSE SOURCES ...@@ -46,17 +42,25 @@ file(GLOB_RECURSE SOURCES
list(FILTER SOURCES EXCLUDE REGEX "zlog/src/zlog-chk-conf.c") list(FILTER SOURCES EXCLUDE REGEX "zlog/src/zlog-chk-conf.c")
list(FILTER SOURCES EXCLUDE REGEX "zlog/src/zlog_win.c") list(FILTER SOURCES EXCLUDE REGEX "zlog/src/zlog_win.c")
# 创建可执行文件${PROJECT_NAME} # 设置静态链接选项
add_executable( main ${SOURCES}) set(CMAKE_FIND_LIBRARY_SUFFIXES .a .so)
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++ -Wl,-Bstatic -Wl,--whole-archive -lpthread -Wl,--no-whole-archive -Wl,-Bdynamic")
# 创建可执行文件
add_executable(main ${SOURCES})
# 链接库 # 链接静态库
target_link_libraries( main PRIVATE target_link_libraries(main PRIVATE
-Wl,--start-group
wiringPi wiringPi
mosquitto mosquitto
cjson cjson
curl curl
m m
#zlog ssl
crypto
-Wl,--end-group
) )
# 安装规则(可选) # 安装规则(可选)
......
...@@ -520,6 +520,30 @@ src/mqtt.c.s: ...@@ -520,6 +520,30 @@ src/mqtt.c.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/mqtt.c.s $(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/mqtt.c.s
.PHONY : src/mqtt.c.s .PHONY : src/mqtt.c.s
src/mqtt_verify.o: src/mqtt_verify.c.o
.PHONY : src/mqtt_verify.o
# target to build an object file
src/mqtt_verify.c.o:
$(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/mqtt_verify.c.o
.PHONY : src/mqtt_verify.c.o
src/mqtt_verify.i: src/mqtt_verify.c.i
.PHONY : src/mqtt_verify.i
# target to preprocess a source file
src/mqtt_verify.c.i:
$(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/mqtt_verify.c.i
.PHONY : src/mqtt_verify.c.i
src/mqtt_verify.s: src/mqtt_verify.c.s
.PHONY : src/mqtt_verify.s
# target to generate assembly for a file
src/mqtt_verify.c.s:
$(MAKE) $(MAKESILENT) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/src/mqtt_verify.c.s
.PHONY : src/mqtt_verify.c.s
src/opensh.o: src/opensh.c.o src/opensh.o: src/opensh.c.o
.PHONY : src/opensh.o .PHONY : src/opensh.o
...@@ -1512,6 +1536,9 @@ help: ...@@ -1512,6 +1536,9 @@ help:
@echo "... src/mqtt.o" @echo "... src/mqtt.o"
@echo "... src/mqtt.i" @echo "... src/mqtt.i"
@echo "... src/mqtt.s" @echo "... src/mqtt.s"
@echo "... src/mqtt_verify.o"
@echo "... src/mqtt_verify.i"
@echo "... src/mqtt_verify.s"
@echo "... src/opensh.o" @echo "... src/opensh.o"
@echo "... src/opensh.i" @echo "... src/opensh.i"
@echo "... src/opensh.s" @echo "... src/opensh.s"
......
#define PROJECT_VERSION_MAJOR 1 #define PROJECT_VERSION_MAJOR 1
#define PROJECT_VERSION_MINOR 1 #define PROJECT_VERSION_MINOR 1
#define PROJECT_VERSION_PATCH 7 #define PROJECT_VERSION_PATCH 8
#define GIT_HASH "" #define GIT_HASH ""
#define BUILD_TIMESTAMP "2025-06-09T07:19:20" #define BUILD_TIMESTAMP "2025-06-26T03:49:36"
#define BUILD_USER "orangepi" #define BUILD_USER "orangepi"
No preview for this file type
#ifndef MQTT_VERIFY_H__
#define MQTT_VERIFY_H__
#define AES_BLOCK_SIZE 16
extern int gverify_count;//验证计时
extern int gverify_index;//判断是否验证成功
int receive_jwt(cJSON *body);//jwt验证
//接收安卓发送的mqtt
//int receive_verify(cJSON *body);//为aes验证,暂时不用,注释
//加密并发送mqtt
//int mqtt_encryption();//为aes验证,暂时不用,注释
int message2006_verify(cJSON *body);
#endif
\ No newline at end of file
...@@ -8,6 +8,7 @@ char urlbuf[512]; ...@@ -8,6 +8,7 @@ char urlbuf[512];
char keybuf[256]; char keybuf[256];
double audio_volume=0.8; double audio_volume=0.8;
//接收音频播放
void audioplay_mqtt_receive(cJSON *json) { void audioplay_mqtt_receive(cJSON *json) {
// 解析"audioLink"字段(修正了原始JSON中的拼写错误) // 解析"audioLink"字段(修正了原始JSON中的拼写错误)
cJSON *audio_link = cJSON_GetObjectItemCaseSensitive(json, "audioLink"); cJSON *audio_link = cJSON_GetObjectItemCaseSensitive(json, "audioLink");
...@@ -49,7 +50,8 @@ void audioplay_mqtt_receive(cJSON *json) { ...@@ -49,7 +50,8 @@ void audioplay_mqtt_receive(cJSON *json) {
} }
} }
void audioplay_send_mqtt() {//发送音频播放是否完毕 //发送音频播放是否完毕
void audioplay_send_mqtt() {
cJSON *root = cJSON_CreateObject(); cJSON *root = cJSON_CreateObject();
cJSON *body = cJSON_CreateObject(); cJSON *body = cJSON_CreateObject();
cJSON *head = cJSON_CreateObject(); cJSON *head = cJSON_CreateObject();
...@@ -73,6 +75,7 @@ void audioplay_send_mqtt() {//发送音频播放是否完毕 ...@@ -73,6 +75,7 @@ void audioplay_send_mqtt() {//发送音频播放是否完毕
cJSON_Delete(root); cJSON_Delete(root);
} }
//音频播放
void audioplay_cycle(){ void audioplay_cycle(){
char command[512]; char command[512];
int ret; int ret;
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "ads1115.h" #include "ads1115.h"
#include "audioplay.h" #include "audioplay.h"
#include "wifichange.h" #include "wifichange.h"
#include "mqtt_verify.h"
struct mosquitto *mosq; struct mosquitto *mosq;
...@@ -51,6 +52,7 @@ char *glon=NULL;//加入gps后删除,心跳预留,不更改 ...@@ -51,6 +52,7 @@ char *glon=NULL;//加入gps后删除,心跳预留,不更改
time_t gStart;//时间戳 time_t gStart;//时间戳
//mqtt初始化
int mqtt_init() { int mqtt_init() {
mosquitto_lib_init(); mosquitto_lib_init();
// 这里创建mosq可以保留,也可以删除这一行,让创建放到 Mqtt_onnect 里 // 这里创建mosq可以保留,也可以删除这一行,让创建放到 Mqtt_onnect 里
...@@ -63,7 +65,8 @@ int mqtt_init() { ...@@ -63,7 +65,8 @@ int mqtt_init() {
return 0; return 0;
} }
void on_connect(struct mosquitto *mosq, void *obj, int rc) {//回调函数 //回调函数
void on_connect(struct mosquitto *mosq, void *obj, int rc) {
if (rc == 0) { if (rc == 0) {
my_zlog_debug("Connected to broker"); my_zlog_debug("Connected to broker");
topic_middle_value(); topic_middle_value();
...@@ -75,7 +78,8 @@ void on_connect(struct mosquitto *mosq, void *obj, int rc) {//回调函数 ...@@ -75,7 +78,8 @@ void on_connect(struct mosquitto *mosq, void *obj, int rc) {//回调函数
} }
} }
void heartbeat_send() {//心跳发送格式*5/2 //心跳发送格式*5/2
void heartbeat_send() {
float voltage = INA226_readBusVoltage(); float voltage = INA226_readBusVoltage();
float current = INA226_readCurrent(); float current = INA226_readCurrent();
//my_zlog_debug("%.2f\n", voltage); //my_zlog_debug("%.2f\n", voltage);
...@@ -129,7 +133,8 @@ void heartbeat_send() {//心跳发送格式*5/2 ...@@ -129,7 +133,8 @@ void heartbeat_send() {//心跳发送格式*5/2
cJSON_Delete(root); // 释放 cJSON 对象 cJSON_Delete(root); // 释放 cJSON 对象
} }
void angle_mqtt_send() { //角度发送
void angle_mqtt_send() {
float angle_shot=ads1115_read_channel(2); float angle_shot=ads1115_read_channel(2);
if(angle_shot>0){ if(angle_shot>0){
angle_shot=angle_shot*360/5; angle_shot=angle_shot*360/5;
...@@ -150,14 +155,16 @@ void angle_mqtt_send() { ...@@ -150,14 +155,16 @@ void angle_mqtt_send() {
} }
void mqtt_wirte(){//心跳格式,每5s一次心跳 //心跳格式,每5s一次心跳
void mqtt_wirte(){
if( heartbeat_count >= 30) heartbeat_send(); if( heartbeat_count >= 30) heartbeat_send();
if( AppExit_pin_pwm == 202) angle_mqtt_send(); if( AppExit_pin_pwm == 202) angle_mqtt_send();
} }
void message_3(cJSON *body){//message_type为3,控制pwm //message_type为3,控制pwm
void message_3(cJSON *body){
cJSON *pwm_ctrl = cJSON_GetObjectItem(body, "pwm_ctrl"); cJSON *pwm_ctrl = cJSON_GetObjectItem(body, "pwm_ctrl");
cJSON *pin_setctrl = cJSON_GetObjectItem(body, "pin_setctrl"); cJSON *pin_setctrl = cJSON_GetObjectItem(body, "pin_setctrl");
if(pwm_ctrl==NULL||pin_setctrl==NULL){ if(pwm_ctrl==NULL||pin_setctrl==NULL){
...@@ -219,7 +226,39 @@ void message_4(cJSON *body){//message 为4时候 ...@@ -219,7 +226,39 @@ void message_4(cJSON *body){//message 为4时候
if(AppExit_pin_pwm == 202 ) tank_shot_back_stop(gvalt[1],gvalt[2]); if(AppExit_pin_pwm == 202 ) tank_shot_back_stop(gvalt[1],gvalt[2]);
} }
int download_message(cJSON *body){//接收的下载的mqtt消息 //当接收到2时候验证
void message_2_judyverify(cJSON *body){
receive_jwt(body);
if(gverify_index == 0) {
refresh_cam();
} else {
my_zlog_warn("验证不通过");
}
}
//当接收到3时候验证
void message_3_judyverify(cJSON *body){
receive_jwt(body);
if(gverify_index == 0) {
message_3(body);
} else {
my_zlog_warn("验证不通过");
}
}
//当接收到4时候验证
void message_4_judyverify(cJSON *body){
receive_jwt(body);
if(gverify_index == 0) {
message_4(body);
} else {
my_zlog_warn("验证不通过");
}
}
//接收的下载的mqtt消息
int download_message(cJSON *body){
if (cJSON_IsObject(body)) { if (cJSON_IsObject(body)) {
// 获取 doby 对象 // 获取 doby 对象
// 获取 site 中的 name 和 url // 获取 site 中的 name 和 url
...@@ -245,6 +284,7 @@ int download_message(cJSON *body){//接收的下载的mqtt消息 ...@@ -245,6 +284,7 @@ int download_message(cJSON *body){//接收的下载的mqtt消息
return 0; return 0;
} }
//接收到设备改名函数
int device_mqttchange_name(cJSON *device_id){ int device_mqttchange_name(cJSON *device_id){
cJSON *id = cJSON_GetObjectItem(device_id, "id");// 提取ID cJSON *id = cJSON_GetObjectItem(device_id, "id");// 提取ID
cJSON *date = cJSON_GetObjectItem(device_id, "date");// 提取日期 cJSON *date = cJSON_GetObjectItem(device_id, "date");// 提取日期
...@@ -273,20 +313,16 @@ int device_message_receive(cJSON *json){//接收到的控制设备的mqtt消息 ...@@ -273,20 +313,16 @@ int device_message_receive(cJSON *json){//接收到的控制设备的mqtt消息
gmessage_type=message_type->valueint; gmessage_type=message_type->valueint;
my_zlog_debug("message_type: %d",message_type->valueint); my_zlog_debug("message_type: %d",message_type->valueint);
switch(gmessage_type){ switch(gmessage_type){
case 1:
system("sudo reboot");//重启香橙派
my_zlog_debug("重启成功");
break;
case 2: case 2:
refresh_cam(); message_2_judyverify(body);
my_zlog_debug("刷新成功"); my_zlog_debug("进入刷新");
break; break;
case 3: case 3:
message_3(body); message_3_judyverify(body);
my_zlog_debug("进入pwm控制"); my_zlog_debug("进入pwm控制");
break; break;
case 4: case 4:
message_4(body); message_4_judyverify(body);
my_zlog_debug("进入引脚控制"); my_zlog_debug("进入引脚控制");
break; break;
case 2001: case 2001:
...@@ -307,6 +343,19 @@ int device_message_receive(cJSON *json){//接收到的控制设备的mqtt消息 ...@@ -307,6 +343,19 @@ int device_message_receive(cJSON *json){//接收到的控制设备的mqtt消息
break; break;
case 2005: case 2005:
download_message(body); download_message(body);
my_zlog_debug("进入下载");
break;
case 2006:
message2006_verify(body);
my_zlog_debug("进入消息为2006验证");
break;
case 2011:
system("sudo reboot");//重启香橙派
my_zlog_debug("重启成功");
break;
case 2012:
refresh_cam();
my_zlog_debug("刷新成功");
break; break;
default: default:
break; break;
...@@ -316,7 +365,8 @@ int device_message_receive(cJSON *json){//接收到的控制设备的mqtt消息 ...@@ -316,7 +365,8 @@ int device_message_receive(cJSON *json){//接收到的控制设备的mqtt消息
return 0; return 0;
} }
void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) {//消息回环函数 //消息回环函数
void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) {
time_t end = time(NULL); time_t end = time(NULL);
if(gStart+5>end){ if(gStart+5>end){
...@@ -347,8 +397,8 @@ void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_messag ...@@ -347,8 +397,8 @@ void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_messag
} }
} }
// 返回连接结果,0成功,非0失败
int mqtt_create(struct mosquitto *mosq) { // 返回连接结果,0成功,非0失败 int mqtt_create(struct mosquitto *mosq) {
mosquitto_reconnect_delay_set(mosq, 2, 10, true); mosquitto_reconnect_delay_set(mosq, 2, 10, true);
mosquitto_connect_callback_set(mosq, on_connect); mosquitto_connect_callback_set(mosq, on_connect);
mosquitto_message_callback_set(mosq, on_message); mosquitto_message_callback_set(mosq, on_message);
...@@ -363,7 +413,8 @@ int mqtt_create(struct mosquitto *mosq) { // 返回连接结果,0成功,非0 ...@@ -363,7 +413,8 @@ int mqtt_create(struct mosquitto *mosq) { // 返回连接结果,0成功,非0
return 0; // 成功 return 0; // 成功
} }
int mqtt_cycle(struct mosquitto *mosq) {//阻塞型 //阻塞型
int mqtt_cycle(struct mosquitto *mosq) {
// 这个函数会阻塞直到连接断开或错误返回 // 这个函数会阻塞直到连接断开或错误返回
int rc = mosquitto_loop_forever(mosq, -1, 1); int rc = mosquitto_loop_forever(mosq, -1, 1);
if (rc != MOSQ_ERR_SUCCESS) { if (rc != MOSQ_ERR_SUCCESS) {
...@@ -384,6 +435,7 @@ int mqtt_cycle(struct mosquitto *mosq) {//阻塞型 ...@@ -384,6 +435,7 @@ int mqtt_cycle(struct mosquitto *mosq) {//阻塞型
// } // }
// } // }
//mqtt清理
void mqtt_clean(struct mosquitto *mosq){ void mqtt_clean(struct mosquitto *mosq){
// 清理 // 清理
mosquitto_destroy(mosq); mosquitto_destroy(mosq);
......
This diff is collapsed.
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "device_exit.h" #include "device_exit.h"
#include "thread_main.h" #include "thread_main.h"
#include "wifichange.h" #include "wifichange.h"
#include "mqtt_verify.h"
pthread_t thread[6]; // 全局线程句柄数组(或传参) pthread_t thread[6]; // 全局线程句柄数组(或传参)
...@@ -135,7 +136,9 @@ void *Mqtt_onnect(void *arg) { ...@@ -135,7 +136,9 @@ void *Mqtt_onnect(void *arg) {
void *delay_count(void *arg) { void *delay_count(void *arg) {
while (1) { while (1) {
Delay_Ms(0,5); Delay_Ms(0,5);
device_delay_count++; device_delay_count++;//设备计时,坦克打击倒退逻辑
gverify_count++;//验证计时,每15s一次
if(gverify_count >= 20000) gverify_count = 20000;
if(device_delay_count >= 5000) device_delay_count = 5000; if(device_delay_count >= 5000) device_delay_count = 5000;
} }
return NULL; return NULL;
......
...@@ -70,19 +70,19 @@ void car0102_mode_2_back(unsigned char gval) { ...@@ -70,19 +70,19 @@ void car0102_mode_2_back(unsigned char gval) {
if (gval < 50) { if (gval < 50) {
pwmWrite(PWM_PIN_SPEED, 0); pwmWrite(PWM_PIN_SPEED, 0);
} else if (gval <= 55) { } else if (gval <= 55) {
pwmWrite(PWM_PIN_SPEED, b + 30 * k); pwmWrite(PWM_PIN_SPEED,b + 40 * k);
} else if (gval <= 60) { } else if (gval <= 60) {
pwmWrite(PWM_PIN_SPEED, b + 30 * k); pwmWrite(PWM_PIN_SPEED,b + 40 * k);
} else if (gval <= 65) { } else if (gval <= 65) {
pwmWrite(PWM_PIN_SPEED, b + 30 * k); pwmWrite(PWM_PIN_SPEED, b + 40* k);
} else if (gval <= 70) { } else if (gval <= 70) {
pwmWrite(PWM_PIN_SPEED, b + 30 * k); pwmWrite(PWM_PIN_SPEED, b + 40 * k);
} else if (gval <= 75) { } else if (gval <= 75) {
pwmWrite(PWM_PIN_SPEED, b + 30 * k); pwmWrite(PWM_PIN_SPEED, b + 40 * k);
} else if (gval <= 90) { } else if (gval <= 90) {
pwmWrite(PWM_PIN_SPEED, b + 30 * k); pwmWrite(PWM_PIN_SPEED, b + 40 * k);
} else if (gval <= 100) { } else if (gval <= 100) {
pwmWrite(PWM_PIN_SPEED, b + 35 * k); pwmWrite(PWM_PIN_SPEED, b + 40 * k);
} else if (gval <= 110) { } else if (gval <= 110) {
pwmWrite(PWM_PIN_SPEED, b + 40 * k); pwmWrite(PWM_PIN_SPEED, b + 40 * k);
} else if (gval <= 120) { } else if (gval <= 120) {
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
char temperature[20]; char temperature[20];
float temp_str; float temp_str;
//温度获取
int heat_tem() { int heat_tem() {
FILE *file; FILE *file;
char line[MAX_LINE_LENGTH]; char line[MAX_LINE_LENGTH];
......
...@@ -4,7 +4,8 @@ ...@@ -4,7 +4,8 @@
#include "gpio_pwm_carship.h" #include "gpio_pwm_carship.h"
#include "request.h" #include "request.h"
int alarm_highest(int index) {//最高警报,最低电压报警 //最高警报,最低电压报警
int alarm_highest(int index) {
if(index == 1) { if(index == 1) {
pin_value(20,1);//紫灯 pin_value(20,1);//紫灯
if(enable_buzzer_value) { if(enable_buzzer_value) {
...@@ -18,7 +19,8 @@ int alarm_highest(int index) {//最高警报,最低电压报警 ...@@ -18,7 +19,8 @@ int alarm_highest(int index) {//最高警报,最低电压报警
return index ; return index ;
} }
int alarm_low(int index) {//比较小警报 //比较小警报
int alarm_low(int index) {
if(index == 1) { if(index == 1) {
pin_value(16,1);//黄灯 pin_value(16,1);//黄灯
} else if(index == 0) { } else if(index == 0) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment