基于Linux全志H3开发板的智能垃圾桶

本文介绍了一款基于Linux全志H3开发板的智能垃圾桶项目,详细阐述了功能要求、开发环境配置、引脚分配、环境变量设置、代码实现以及通过Socket编程实现远程控制垃圾桶的操作。此外,还分享了项目视频和作者的心得体会。
摘要由CSDN通过智能技术生成

一、功能要求

功能需求:
靠近时,垃圾桶开启2秒,2秒后关闭
垃圾桶开启带滴滴声
垃圾桶开启超过10秒,滴滴声警报
垃圾桶长期开启不能让舵机有顿挫感 (尚未解决)
语音控制垃圾桶开关盖
拓展需求:回顾二阶段的Socket编程,实现Sockect客户端发送指令远程打开/关闭垃圾桶,并打印出垃圾桶状态

二、开发环境

1、准备电子器件:

Orangepi Zero2 全志H616开发板,超声波模块,蜂鸣器,舵机sg90,语音模块SU-03T

2,使用软件:

MobaXterm_Personal_20.3(命令控制终端控制开发板)

3、配置

语音模块的配置如下图,按照官网步骤检测配置通过即可语音模块唤醒词

控制命令
语音控制命令通过串口发送数据,O对应ASCII码数据79,C对应67,A对应65

4、引脚分配

通过输入gpio readall可以查看开发板上的所有引脚图
开发板所有引脚分配图
全部模块vcc接5v,gnd接gnd,!!!除了蜂鸣器vcc接3.3v
语音模块:b7接开发板的RXD.5 wPi 4口
蜂鸣器:I/O接开发板的 wPi 7口
舵机:PWM接开发板的wPi 5口
超声波:Trig 接开发板的wPi 0口,Echo 接开发板的wPi 1口

5、环境变量

添加环境变量命令 export PATH=$PATH:(你想要添加的环境变量路径),
我添加的环境变量路径因为里面有自用需包含头文件的 uartTool.h,如果下列操作编译不通过可能没有这个头文件,或者有其他库没安装。

6、编译运行

(1)服务运行端rubbinTest.c
先编译,编译rubbinTest.c 和 uartTool.h通过,没通过,看编译报警
gcc rubbinTest.c uartTool.c -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt

运行(sudo是用户超级权限,./a.out是运行程序,/dev/ttyS5是串口,127.0.0.1 是本地可用ip,8989是端口号)
sudo ./a.out /dev/ttyS5 127.0.0.1 8989

(2)socket控制端clientTest.c
先编译,gcc clientTest.c -o client
编程出运行程序名字叫client

运行
./client 127.0.0.1 8989

三、代码

rubbinTest.c文件的代码

#include <stdio.h>
#include <string.h>
#include <wiringPi.h>
#include <sys/time.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <pthread.h>			//线程
#include <sys/types.h>			//socket
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include "uartTool.h"

#define BEEP 7   //设置7针脚为蜂鸣器控制引脚
#define Trig 0
#define Echo 1
#define SG90Pin 5

int fd;
int jd = 0;
double distance;
int jd_bak;
char get_cmd;

/******socket所需变量**************/
char readBuf[128];
static int c_fd;
int n_read;

int fdPipe[2];
//int pid;
char buf[128];

/********************/
static int i 			= 0;
static int openCnt 		= 0;
static int openUart 	= 0;
static int openSocket 	= 0;
static int j 			= 0;

/***********服务器指令控制****************/
char get_cmd_type(char *get_cmd)
{
   
	if(strstr(get_cmd,"open")  !=NULL) 	        return 'O';
	if(strstr(get_cmd,"close") !=NULL)       	return 'C';
	if(strstr(get_cmd,"alarm") !=NULL)          return 'A';

	return 'E';//error
}

void* mysocket_cmd()
{
   

	while(1){
   
    //  memset(buffer,'\0',sizeof(buffer));
    //  serialGetstring(fd, buffer);
      memset(readBuf,0,sizeof(readBuf));
      n_read = read(c_fd,readBuf,128);
      if(n_read == -1){
   
              perror("read");
	  }else{
   
           printf("\n read get:%s\n",readBuf);
           get_cmd = get_cmd_type(readBuf);
	  }

        printf("socket GET->0x%c\n",get_cmd);
        switch(get_cmd){
   
            case 'O':
                printf("open\n");
                openSocket = 1;
				close(fdPipe[0]);//无名管道,用于进程间通信
    			write(fdPipe[1],&openSocket,sizeof(int));
    		//	wait();
                break;
            case 'C':
                printf("close\n");
                if(distance < 10.00){
   
                    openSocket = 1;
                }else{
   
                    openSocket = 0;
                }
				close(fdPipe[0]);//无名管道,用于进程间通信
               	write(fdPipe[1],&openSocket,sizeof(int));
              //  wait();
                break;
            case 'A':
                printf("alarm\n");
                break;
            default :
                printf("input cmd error!\n");
        }
    }
	
}

/*********串口部分语音控制部分************/
void* readSerial()
{
   
    char cmd;
    while(
  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听雨眠、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值