完整代码见附件
视频
9b61ba05a192d75540ecd38ec7187a08
b站视频
视频号
tinygl+mpu6050角度3D展示与UDP上报数据 (qq.com)
前面我们实现了角度数据的获取,显示,我们还可以将数据传输到云端,如果超过范围实现告警,实现地震,塌方,位移等地质灾害得预警。
板在wifi可以连接外网,我们使用udp协议上报数据,
增加udp.c udp.h 实现相关发送接口
Udp.c如下
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
/* socket文件描述符 */
int sock_fd = -1;
struct sockaddr_in addr_serv;
int udp_init(char* ip, int port)
{
if(sock_fd >= 0)
{
return 0;
}
/* 建立udp socket */
sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(sock_fd < 0)
{
perror("socket");
return -1;
}
/* 设置address */
memset(&addr_serv, 0, sizeof(addr_serv));
addr_serv.sin_family = AF_INET;
addr_serv.sin_addr.s_addr = inet_addr(ip);
addr_serv.sin_port = htons(port);
return 0;
}
int udp_send(char* buffer, int len)
{
int send_num;
send_num = sendto(sock_fd, buffer, len, 0, (struct sockaddr *)&addr_serv, sizeof(addr_serv));
if(send_num < 0)
{
perror("sendto error:");
return -1;
}
}
int udp_deinit(void)
{
if(sock_fd >= 0)
{
close(sock_fd);
sock_fd = -1;
}
}
Udp.h如下
#ifndef UDP_H
#define UDP_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
int udp_init(char* ip, int port);
int udp_send(char* buffer, int len);
int udp_deinit(void);
#ifdef __cplusplus
}
#endif
#endif
上报数据
snprintf(text,sizeof(text),"x:%f",th[0]);
glDrawText((GLubyte *)text, 0, 0, 0xFF0000);
udp_send(text, strlen(text));
snprintf(text,sizeof(text),"y:%f",th[1]);
glDrawText((GLubyte *)text, 0, 12, 0x00FF00);
udp_send(text, strlen(text));
snprintf(text,sizeof(text),"z:%f",th[2]);
glDrawText((GLubyte *)text, 0, 24, 0x0000FF);
udp_send(text, strlen(text));
完整代码见附件
编译
gcc tinygl/src/*.c cube.c lcd.c mpu6050.c mpu6050_itf.c udp.c -I tinygl/include/ -o cube -lm
运行
先连接wifi,
确认服务端ip地址 我这里是192.168.31.236
sudo python ~/WorkSpace/System/net/connect_wifi.py CMCC-bdgQ cqmygysdss
./cube 192.168.31.236 8243
测试效果见测试