Commit 06ac49c1 authored by 957dd's avatar 957dd

remove serial and gps

parents
controlcar00020
\ No newline at end of file
import os
import socket
def get_local_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
s.close()
return ip
except Exception as e:
print(f"获取本地IP地址时出错: {e}")
return None
def write_to_file(data):
try:
# 打开文件,模式为写入模式(会清空已有内容)
with open("/home/orangepi/car/master/Deviceld.txt", "w", encoding="utf-8") as file:
file.write(data)
print("数据已成功写入 Deviceld.txt")
except Exception as e:
print(f"写入文件时出错: {e}")
def read_from_file():
try:
if os.path.exists("/home/orangepi/car/master/Deviceld.txt"):
with open("/home/orangepi/car/master/Deviceld.txt", "r", encoding="utf-8") as file:
return file.read()
return "文件内容为空。"
except Exception as e:
print(f"读取文件时出错: {e}")
return "无法读取文件内容。"
if __name__ == '__main__':
local_ip = get_local_ip()
if local_ip is None:
print("无法获取本地IP地址,程序退出。")
else:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_address = (local_ip, 8080)
server_socket.bind(server_address)
server_socket.listen(5)
print(f'Server is running on http://{server_address[0]}:{server_address[1]}')
while True:
client_socket, client_address = server_socket.accept()
print(f'Accepted connection from {client_address[0]}:{client_address[1]}')
try:
request_data = client_socket.recv(1024).decode('utf-8')
if not request_data:
continue
request_lines = request_data.split('\n')
request_line = request_lines[0]
method, path, _ = request_line.split(' ')
print(f'Received {method} request for {path}')
if method == "POST" and path == "/submit":
# 从请求体中提取数据
body = request_lines[-1] # 请求体在最后一行
data = body.split('=')[1] if '=' in body else body
# 保存数据到文件
write_to_file(data)
# 返回确认响应
response_body = f"""
<html>
<head><title>数据提交成功</title></head>
<body>
<h1>数据已成功提交!</h1>
<a href="/">返回主页</a>
</body>
</html>
"""
status_code = '200 OK'
elif method == "GET" and path == "/":
# 读取文件内容
file_content = read_from_file()
# 返回 HTML 页面
response_body = f'''
<html>
<head>
<title>设备输入页面</title>
<style>
body {{ font-family: Arial, sans-serif; background-color: #f4f4f9; margin: 0; padding: 0; }}
.container {{ max-width: 600px; margin: 50px auto; padding: 20px;
background: white; border-radius: 8px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); }}
h1 {{ text-align: center; }}
textarea {{ width: 100%; height: 150px; margin: 10px 0;
padding: 10px; border: 1px solid #ccc; border-radius: 4px; resize: none; }}
form {{ margin-top: 20px; }}
input[type="text"] {{ width: 90%; padding: 10px;
margin: 10px 0; border: 1px solid #ccc; border-radius: 4px; font-size: 16px; }}
input[type="submit"] {{ background: #007bff; color: white;
padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; font-size: 16px; }}
input[type="submit"]:hover {{ background: #0056b3; }}
</style>
</head>
<body>
<div class="container">
<h1>欢迎进入设备管理界面!</h1>
<textarea readonly>{file_content}</textarea>
<form action="/submit" method="post">
<input type="text" name="data" placeholder="请输入一些数据" required>
<input type="submit" value="提交">
</form>
</div>
</body>
</html>
'''
status_code = '200 OK'
else:
response_body = '<h1>404 Not Found</h1>'
status_code = '404 Not Found'
response_headers = (
f'HTTP/1.1 {status_code}\n'
f'Content-Type: text/html; charset=utf-8\n'
f'Content-Length: {len(response_body.encode("utf-8"))}\n'
f'Connection: close\n\n'
)
response = response_headers + response_body
client_socket.sendall(response.encode('utf-8'))
except Exception as e:
print(f'Error handling request: {e}')
error_response = (
'HTTP/1.1 500 Internal Server Error\n'
'Content-Type: text/html; charset=utf-8\n'
'Connection: close\n\n'
'<h1>500 内部服务器错误</h1>'
)
client_socket.sendall(error_response.encode('utf-8'))
finally:
client_socket.close()
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay_Ms(int sec,int msec);
#endif
\ No newline at end of file
#ifndef __GPIO_PWM_H__
#define __GPIO_PWM_H__
// 定义 PWM 引脚的 WiringPi 编号
void pwm_speed();//pwm控制函数
void midde_pwm();
void speed_change(unsigned char *buf);//速度和转向值处理mqtt函数
void pin_init();
void pin_all_default();
void pin_value(int pin,int value);
#endif
\ No newline at end of file
#ifndef __IP_H__
#define __IP_H__
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ifaddrs.h>
extern char ip_address[INET_ADDRSTRLEN];//
int ipaddr();
#endif
#ifndef __MAIN_H__
#define __MAIN_H__
#define filename "/home/orangepi/car/master/Deviceld.txt"
pthread_t thread[4];
//开启线程
int thread_start(void *AppExit(void *arg),void *Mqttbeat(void *arg),void *opensh(void *arg),void *Mqtt_onnect(void *arg))
{
if(pthread_create(&thread[0],NULL,AppExit,NULL)!=0)
{
perror("Failed to create thread 0");
return 0;
}
if(pthread_create(&thread[1],NULL,Mqttbeat,NULL)!=0)
{
perror("Failed to create thread 1");
return 1;
}
if(pthread_create(&thread[2],NULL,opensh,NULL)!=0)
{
perror("Failed to create thread 2");
return 2;
}
if(pthread_create(&thread[3],NULL,Mqtt_onnect,NULL)!=0)
{
perror("Failed to create thread 3");
return 3;
}
return 0;
}
// 等待线程结束
void thread_end()
{
pthread_join(thread[0], NULL);
pthread_join(thread[1], NULL);
pthread_join(thread[2], NULL);
pthread_join(thread[3], NULL);
}
#endif
\ No newline at end of file
#ifndef __MQTT_H__
#define __MQTT_H__
extern char* TOPIC ;//="app2dev/controlcar0004"
extern char* TOPIC2 ;//="dev2app/controlcar0004"
extern char* TOPIC3;//= "controlcar0004"
#define BROKER_ADDRESS "119.45.167.177"
#define BROKER_PORT 1883
#define USERNAME "admin" // 替换为你的用户名
#define PASSWORD "admin" // 替换为你的密码
extern struct mosquitto *mosq;
extern time_t gStart;
extern int gPwmCount; // 计数
extern int gmessage_type;
int mqtt_init();
void mqtt_create(struct mosquitto *mosq);
void on_connect(struct mosquitto *mosq, void *obj, int rc);
void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) ;
void mqtt_MAC_wirte();
void mqtt_wirte();
void mqtt_cycle(struct mosquitto *mosq);
void mqtt_clean(struct mosquitto *mosq);
#endif
\ No newline at end of file
#ifndef __opensh_H__
#define __opensh_H__
//#define SHELLFILE "/home/kickpi/car/master/camopen.sh"
//#define SHELLFILECLOSE "/home/kickpi/car/master/recam.sh"
extern char gwebcam[254];
int opencamsh();
void refresh_cam();
#endif
\ No newline at end of file
File added
# 编译器
CC = gcc
# 编译选项
CFLAGS = -Wall -g -Ilib
# 链接库
LDFLAGS = -lwiringPi -lmosquitto -lcjson
# 目标可执行文件
TARGET = main
# 源文件目录
SRC_DIR = usr src
# 头文件目录
INC_DIR = lib
# 查找所有 .c 文件
SRCS = $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.c))
# 目标文件
OBJS = $(SRCS:.c=.o)
# 默认目标
all: $(TARGET)
# 链接目标文件生成可执行文件
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(LDFLAGS)
# 编译每个 .c 文件为 .o 文件
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
# 清理生成的文件
clean:
rm -f $(OBJS) $(TARGET)
#include <stdio.h>
#include <time.h>
void Delay_Ms(int sec,int msec)
{
struct timespec ts;
ts.tv_sec = sec; // 秒
ts.tv_nsec = msec*1000000; // 1毫秒 = 1000000纳秒
nanosleep(&ts,NULL);
}
\ No newline at end of file
File added
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
// 定义 PWM 引脚的 WiringPi 编号
#define PWM_PIN_SPEED 21
#define PWM_PIN_CHANGE 2
// 定义 PWM 频率为 50Hz
#define PWM_FREQ 50
// 定义占空比范围,这里设置为 0 到 1000
#define MAX_DUTY 1000
const int gpioWPi[] = {5, 6, 7, 10, 16, 20, 22, 23, 24, 25, 26, 27};
void pin_init()//初始化引脚
{
int gpioCount = sizeof(gpioWPi) / sizeof(gpioWPi[0]);
// 设置所有GPIO为输出模式
for(int i = 0; i < gpioCount; i++) {
pinMode(gpioWPi[i], OUTPUT);
digitalWrite(gpioWPi[i], LOW); // 初始化所有引脚为低电平
}
}
void pin_all_default()//全部至低电平
{
int gpioCount = sizeof(gpioWPi) / sizeof(gpioWPi[0]);
for (int i=0;i<gpioCount;i++)
{
digitalWrite(gpioWPi[i], LOW);
}
}
void pin_value(int pin,int value)
{
if(value==1)
{
digitalWrite(pin, HIGH);
}
else if(value==0)
{
digitalWrite(pin, LOW);
}
printf("pin:%d,%d\n",pin,value);
}
void pwm_speed() {
int pwm_clock = 24000000 / (PWM_FREQ * 1000);
pinMode(PWM_PIN_SPEED,PWM_OUTPUT);
pinMode(PWM_PIN_CHANGE,PWM_OUTPUT);
pwmSetClock(PWM_PIN_SPEED,pwm_clock);//=19200*1000/(hz*2000)
pwmSetRange(PWM_PIN_SPEED,MAX_DUTY);
pwmSetClock(PWM_PIN_CHANGE,pwm_clock);//=19200*1000/(hz*2000)
pwmSetRange(PWM_PIN_CHANGE,MAX_DUTY);
pwmWrite(PWM_PIN_SPEED,75);
pwmWrite(PWM_PIN_CHANGE,70);
}
void midde_pwm()
{
pwmWrite(PWM_PIN_SPEED,75);
pwmWrite(PWM_PIN_CHANGE,70);
}
void mode_1_flont(unsigned char gval)
{
if(gval<50)
{
pwmWrite(PWM_PIN_SPEED,75);
}
if(50<=gval&&gval<=55)
{
pwmWrite(PWM_PIN_SPEED,74);
}
if(55<gval&&gval<=60)
{
pwmWrite(PWM_PIN_SPEED,73);
}
if(60<gval&&gval<=65)
{
pwmWrite(PWM_PIN_SPEED,72);
}
if(65<gval&&gval<=70)
{
pwmWrite(PWM_PIN_SPEED,70);
}
if(70<gval&&gval<=75)
{
pwmWrite(PWM_PIN_SPEED,69);
}
if(75<gval&&gval<=90)
{
pwmWrite(PWM_PIN_SPEED,65);
}
if(90<gval&&gval<=100)
{
pwmWrite(PWM_PIN_SPEED,65);
}
}
void mode_2_back(unsigned char gval)
{
if(gval<50)
{
pwmWrite(PWM_PIN_SPEED,75);
}
if(50<=gval&&gval<=55)
{
pwmWrite(PWM_PIN_SPEED,77);
}
if(55<gval&&gval<=60)
{
pwmWrite(PWM_PIN_SPEED,78);
}
if(60<gval&&gval<=65)
{
pwmWrite(PWM_PIN_SPEED,79);
}
if(65<gval&&gval<=70)
{
pwmWrite(PWM_PIN_SPEED,81);
}
if(70<gval&&gval<=75)
{
pwmWrite(PWM_PIN_SPEED,83);
}
if(75<gval&&gval<=90)
{
pwmWrite(PWM_PIN_SPEED,85);
}
if(90<gval&&gval<=100)
{
pwmWrite(PWM_PIN_SPEED,85);
}
}
void mode_3_left(unsigned char gval)
{
if(gval<45)
{
pwmWrite(PWM_PIN_CHANGE,70);
}
if(gval>=45&&gval<=51)
{
pwmWrite(PWM_PIN_CHANGE,80);
}
if(gval>51&&gval<=57)
{
pwmWrite(PWM_PIN_CHANGE,83);
}
if(gval>57&&gval<=63)
{
pwmWrite(PWM_PIN_CHANGE,85);
}
if(gval>63&&gval<=69)
{
pwmWrite(PWM_PIN_CHANGE,90);
}
if(gval>69&&gval<=75)
{
pwmWrite(PWM_PIN_CHANGE,95);
}
}
void mode_4_right(unsigned char gval)
{
if(gval<45)
{
pwmWrite(PWM_PIN_CHANGE,70);
}
if(gval>=45&&gval<=51)
{
pwmWrite(PWM_PIN_CHANGE,60);
}
if(gval>51&&gval<=57)
{
pwmWrite(PWM_PIN_CHANGE,57);
}
if(gval>57&&gval<=63)
{
pwmWrite(PWM_PIN_CHANGE,54);
}
if(gval>63&&gval<=69)
{
pwmWrite(PWM_PIN_CHANGE,50);
}
if(gval>69&&gval<=75)
{
pwmWrite(PWM_PIN_CHANGE,45);
}
}
void speed_change(unsigned char *buf)//速度和转向引脚数值处理函数
{
unsigned char mode=buf[1];
unsigned char val=buf[2];
switch(mode)
{
case 1:
mode_1_flont(val);
break;
case 2:
mode_2_back(val);
break;
case 3:
mode_3_left(val);
break;
case 4:
mode_4_right(val);
break;
default:
break;
}
}
\ No newline at end of file
File added
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ifaddrs.h>
#include "ip.h"
struct ifaddrs *ifap, *ifa;
struct sockaddr_in *sa;
char ip_address[INET_ADDRSTRLEN];
int ipaddr() {//获取ip
if (getifaddrs(&ifap) == -1) {
perror("getifaddrs() error");
return -1;
}
for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa->ifa_addr != NULL && ifa->ifa_addr->sa_family == AF_INET) {
sa = (struct sockaddr_in *) ifa->ifa_addr;
inet_ntop(AF_INET, &sa->sin_addr, ip_address, sizeof(ip_address));
}
}
printf("ip:%s\n",ip_address);
freeifaddrs(ifap);
return 0;
}
File added
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <mosquitto.h>
#include <cjson/cJSON.h>
#include<time.h>
#include <pthread.h>
#include "ip.h"
#include "mqtt.h"
#include "opensh.h"
#include "gpio_pwm.h"
char* TOPIC;
char* TOPIC2;
char* TOPIC3;
int gPwmCount = 0; // 计数
int gmessage_type=10086;
int rc=0;//判断mqtt是否成功创建
unsigned char modeTemp=0;
unsigned char typeTemp=0;
unsigned char pinTemp=0;
unsigned char valTemp=0;
unsigned char gvalt[4];//存放mqtt接收的tpye,mode等
struct mosquitto *mosq;
time_t gStart;
char *glat=NULL;//加入gps后删除,心跳预留,不更改
char *glon=NULL;//加入gps后删除,心跳预留,不更改
int mqtt_init()
{
// 初始化 mosquitto 库
mosquitto_lib_init();
mosq = mosquitto_new(NULL, true, NULL);
if (!mosq) {
fprintf(stderr, "Failed to create Mosquitto client\n");
return -1;
}
mosquitto_int_option(mosq, MOSQ_OPT_PROTOCOL_VERSION, MQTT_PROTOCOL_V5);
return 0;
}
void on_connect(struct mosquitto *mosq, void *obj, int rc) //回调函数
{
if (rc == 0)
{
printf("Connected to broker\n");
mosquitto_subscribe(mosq, NULL, TOPIC, 0);
}
else
{
fprintf(stderr, "Connection failed with code %d\n", rc);
}
}
void mqtt_wirte()//心跳格式
{
int message=1;
cJSON *root = cJSON_CreateObject();
cJSON *body = cJSON_CreateObject();
cJSON *head = cJSON_CreateObject();
cJSON_AddStringToObject(body, "ip", ip_address);
cJSON_AddStringToObject(body, "ID", TOPIC);
cJSON_AddStringToObject(body, "N", glat);
cJSON_AddStringToObject(body, "E", glon);
cJSON_AddNumberToObject(head, "message_type",message);
cJSON_AddItemToObject(root, "body", body);
cJSON_AddItemToObject(root, "head",head);
char *payload = cJSON_PrintUnformatted(root);
printf("%s\n",payload);
mosquitto_publish(mosq, NULL, TOPIC2, strlen(payload), payload, 0, false);
mosquitto_publish(mosq, NULL, TOPIC3, strlen(payload), payload, 0, false);
}
void message_3(cJSON *body,cJSON *pwm_ctrl)//message_type为3,控制pwm
{
if (!cJSON_IsObject(pwm_ctrl))
{
return;
}
cJSON *mode = cJSON_GetObjectItem(pwm_ctrl, "mode"); //mode=1 速度,mode=2 转向(unsigned char)
cJSON *type = cJSON_GetObjectItem(pwm_ctrl, "type");
cJSON *val = cJSON_GetObjectItem(pwm_ctrl, "val"); //val为pwm的值 0~100(unsigned char)(unsigned char)
modeTemp= mode->valueint;
typeTemp=type->valueint;
valTemp= val->valueint;
if(typeTemp==3)
{
valTemp= val->valueint;
}
gvalt[0]=typeTemp;
gvalt[1]=modeTemp;
gvalt[2]=valTemp;
gPwmCount = 0;
printf("typeTemp:%d\n",gvalt[0]);
printf("modeTemp:%d\n",gvalt[1]);
printf("valTemp:%d\n",gvalt[2]);
speed_change(gvalt);
}
void message_4(cJSON *body, cJSON *pin_setctrl)//message 为4时候
{
if (!cJSON_IsObject(pin_setctrl))
{
return;
}
cJSON *pin = cJSON_GetObjectItem(pin_setctrl, "pin");
cJSON *val = cJSON_GetObjectItem(pin_setctrl, "val"); //val为pwm的值 0~100(unsigned char)(unsigned char)
pinTemp=pin->valueint;
valTemp= val->valueint;
if(valTemp>=1)
{
valTemp=1;
}
gPwmCount=0;
gvalt[0]=0;
gvalt[1]=pinTemp;
gvalt[2]=valTemp;
printf("pinTemp:%d\n",gvalt[1]);
printf("valTemp:%d\n",gvalt[2]);
pin_value(gvalt[1],gvalt[2]);
}
void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message) //消息回环函数
{
time_t end = time(NULL);
if(gStart+5>end)
{
printf("正在处理过期消息\n");
return;
}
// 确保消息有效
if (message->payload && message->payloadlen)
{
// 将消息内容转换为字符串
char *payload_str = (char *)malloc(message->payloadlen + 1);
if (!payload_str)
{
return;
}
memcpy(payload_str, message->payload, message->payloadlen);
payload_str[message->payloadlen] = '\0';
// 解析 JSON
cJSON *json = cJSON_Parse(payload_str);
if (json == NULL)
{
fprintf(stderr, "Error before: [%s]\n", cJSON_GetErrorPtr());
free(payload_str);
}
else
{
// 提取 head 对象
cJSON *head = cJSON_GetObjectItem(json, "head");
if (!cJSON_IsObject(head))
{
free(payload_str);
return;
}
// 提取 message_type
cJSON *message_type = cJSON_GetObjectItem(head, "message_type");
if (!cJSON_IsNumber(message_type))
{
free(payload_str);
return;
}
//提取 body数据段
cJSON *body = cJSON_GetObjectItem(json, "body");
if (!cJSON_IsObject(body))
{
free(payload_str);
return;
}
cJSON *pwm_ctrl = cJSON_GetObjectItem(body, "pwm_ctrl");
cJSON *pin_setctrl = cJSON_GetObjectItem(body, "pin_setctrl");
if(pwm_ctrl==NULL||pin_setctrl==NULL)
{
free(payload_str);
return;
}
gmessage_type=message_type->valueint;
printf("message_type: %d\n",message_type->valueint);
switch(gmessage_type)
{
case 2:
refresh_cam();
break;
case 3:
message_3(body,pwm_ctrl);
break;
case 4:
message_4(body,pin_setctrl);
break;
default:
break;
}
}
// 释放 payload 字符串
free(payload_str);
}
}
void mqtt_create(struct mosquitto *mosq) //创建mqtt客服端
{
mosquitto_reconnect_delay_set(mosq, 2, 10, true);
// 设置连接和消息回调
mosquitto_connect_callback_set(mosq, on_connect);
mosquitto_message_callback_set(mosq, on_message);
//设置用户名和密码
mosquitto_username_pw_set(mosq, USERNAME, PASSWORD);
// 创建 mosquitto 客户端
rc = mosquitto_connect(mosq, BROKER_ADDRESS, BROKER_PORT, 60);
if (rc != MOSQ_ERR_SUCCESS) {
fprintf(stderr, "Failed to connect to broker: %s\n", mosquitto_strerror(rc));
mosquitto_destroy(mosq);
//return EXIT_FAILURE;
}
}
void mqtt_cycle(struct mosquitto *mosq)
{
mosquitto_loop_forever(mosq, -1, 1); // -1 表示无限等待,1 表示处理消息的最大数量
}
void mqtt_clean(struct mosquitto *mosq)
{
// 清理
mosquitto_destroy(mosq);
mosquitto_lib_cleanup();
}
\ No newline at end of file
File added
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mosquitto.h>
#include <cjson/cJSON.h>
#include<time.h>
#include <pthread.h>
#include <stdint.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include "ip.h"
#include "mqtt.h"
#include "opensh.h"
char gwebcam[254];//存放启动火狐网站命令
int opencamsh()
{
const char* url = "https://jywy.yd-ss.com?dev=";
char urls[50];
sprintf(urls,"%s%s",url,TOPIC3);
//setenv("DISPLAY", ":0", 1);//设置环境变量https://jywy.yd-ss.com?dev=controcar0004 --new-window sudo
sprintf(gwebcam,"su - orangepi chromium-browser %s",urls);
system(gwebcam);
printf("%s\n",gwebcam);
printf("open cam\n");
return 0;
}
void refresh_cam() {//刷新页面
setenv("XAUTHORITY", "/home/orangepi/.Xauthority", 1);//加入授权
const char *search_command = "xdotool search --class \"chromium-browser\"";//获取窗口id
FILE *fp = popen(search_command, "r");
if (!fp) {
perror("Failed to execute search command");
return;
}
char window_id[32];
while (fgets(window_id, sizeof(window_id), fp) != NULL) {
window_id[strcspn(window_id, "\n")] = '\0';
char activate_command[128];
snprintf(activate_command, sizeof(activate_command), "xdotool windowactivate --sync %s key Ctrl+r", window_id);
pid_t pid = fork();
if (pid == 0) {
// 子进程执行命令
execl("/bin/sh", "sh", "-c", activate_command, (char *)NULL);
perror("Failed to execute command");
exit(EXIT_FAILURE);
} else if (pid > 0) {
// 父进程不等待子进程结束,继续执行
printf("Executing in child process: %s\n", activate_command);
} else {
perror("Failed to fork");
}
}
pclose(fp);
printf("recam\n");
}
File added
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <fcntl.h>
#include <pthread.h>
#include <unistd.h>
#include <termios.h>
#include <mosquitto.h>
#include <cjson/cJSON.h>
#include <time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ifaddrs.h>
#include <wiringPi.h>
#include "gpio_pwm.h"
#include "main.h"
#include "ip.h"
#include "mqtt.h"
#include "delay.h"
#include "opensh.h"
char buffer[30]; // 用于存储文件内容
void *AppExit(void *arg)//出现意外自动停止
{
while(1)
{
Delay_Ms(0,100);
gPwmCount++;
if(gPwmCount>5)
{
midde_pwm();
gPwmCount=6;
pin_all_default();
}
}
return NULL;
}
void *Mqttbeat(void *arg)
{
printf("Mqttbeat start\n");
Delay_Ms(15,0);
refresh_cam();//刷新cam
Delay_Ms(10,0);
refresh_cam();
Delay_Ms(5,0);
while(1)
{
ipaddr();//获取ip
Delay_Ms(3,0);
mqtt_wirte();//心跳,3s一个
}
return NULL;
}
void *opensh(void *arg)
{
Delay_Ms(5,0);
printf("open cam\n");
opencamsh();//10s后打开火狐游览器并且进入网址
return NULL;
}
void *Mqtt_onnect(void *arg)//mqtt异常处理,断开自动重连,简单粗暴
{
Delay_Ms(5,0);
mqtt_init();//mqtt初始化
mqtt_create(mosq);//创建mqtt客户端
while(1)
{
mqtt_create(mosq);//创建mqtt客户端
mqtt_cycle(mosq); //进入mqtt死循环,异常退出继续执行while
}
mqtt_clean(mosq);
return NULL;
}
char *device_inspect()//读出文件函数
{
FILE *file;
while (1) {
file = fopen(filename, "r"); // 以只读模式打开文件
if (file == NULL)
{
printf("文件 %s 打开失败,等待中...\n", filename);
}
else
{
// 尝试读取文件内容
if (fgets(buffer, sizeof(buffer), file) != NULL)
{
// 如果文件内容不为空
fclose(file);
printf("读取到文件内容: %s\n", buffer);
return buffer;
}
else
{
printf("文件为空,等待中...\n");
}
fclose(file);
}
Delay_Ms(1,0); // 等待1秒后再次检查
}
}
int main(int argc, char *argv[]) {
if (wiringPiSetup() == -1) {
printf("WiringPi setup failed!\n");
return 1;
}
pin_init();
pwm_speed(); //pwm初始化,车为停止
Delay_Ms(60,0);
Delay_Ms(10,0);
const char *readbuf=device_inspect();
TOPIC=malloc(24);
TOPIC2=malloc(24);
TOPIC3= malloc(16);
//TOPIC3=device_inspect();//读取文件内容
//sprintf(TOPIC3,"%s",buffer);
//strcpy(TOPIC3,device_inspect());
sprintf(TOPIC2,"dev2app/%s",readbuf);
sprintf(TOPIC,"app2dev/%s",readbuf);
sprintf(TOPIC3,"%s",readbuf);
printf("1:%s,2:%s,3:%s\n",TOPIC,TOPIC2,TOPIC3);
system("pkill chromium-browser");
gStart=time(NULL);//开始时间戳
ipaddr();//获取ip
thread_start(AppExit,Mqttbeat,opensh,Mqtt_onnect);//开启线程
thread_end();
return EXIT_SUCCESS;
}
\ No newline at end of file
File added
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