智能家居(3) —— 串口通信(语音识别)线程控制

目录

 一、串口通信线程控制代码

mianPro.c

inputCommand.h

voiceControl.c

测试结果

二、语音控制部分


 一、串口通信线程控制代码

mianPro.c

#include <pthread.h>
#include "controlDevice.h"
#include "inputCommand.h"struct InputCommand *pcommandHead = NULL;				              //定义指令工厂初始链表头struct InputCommand* findCommandByName(char *name, struct InputCommand *phead)
{struct InputCommand *tmp =phead;if(phead == NULL){return NULL;}else{while(tmp != NULL){if(strcmp(tmp->commandName,name)==0){return tmp;}tmp = tmp->next;}return NULL;}
}void *voiceControlThread(void *data)			//“语音控制线程”执行函数
{   int nread;struct InputCommand *voiceHandler = NULL;voiceHandler =  findCommandByName("voice", pcommandHead);if(voiceHandler == NULL){printf("find voiceHandler error\n");pthread_exit(NULL);}else{if(voiceHandler->Init(voiceHandler) < 0){       //“语音控制”功能初始化printf("voiceControl init error\n");pthread_exit(NULL);}else{printf("voiceControl init success\n");}while(1){memset(voiceHandler->command,'\0',sizeof(voiceHandler->command));nread = voiceHandler->getCommand(voiceHandler);if(nread == 0){                                 //串口没有获取到指令printf("No voiceCommand received\n");}else{											//获取到指令printf("Get VoiceCommand -->%s\n",voiceHandler->command);        }}   }
}int main()
{if (wiringPiSetup () == -1) { fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ; return 1 ; }pthread_t voiceControl_thread;//指令工厂初始化pcommandHead = addVoiceControlToInputCommandLink(pcommandHead);//语音线程pthread_create(&voiceControl_thread,NULL,voiceControlThread,NULL);pthread_join(voiceControl_thread, NULL);		//主函数等待线程退出return 0;
}

inputCommand.h

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>      
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <wiringPi.h>
#include <wiringSerial.h>struct InputCommand
{char commandName[128];                              //“控制方式”名char deviceName[128];               char command[32];                                   //存放指令int fd;                                             //存放文件描述符(串口/网络)int s_fd;									        //存放服务器套接字描述符char port[12];								        //存放端口号char ipAdress[32];							        //存放 IP地址char log[1024];                                     //日志int (*Init)(struct InputCommand *voice);            //“初始化”函数指针int (*getCommand)(struct InputCommand *voice);      //“获取指令”函数指针struct InputCommand *next;
};struct InputCommand* addVoiceControlToInputCommandLink(struct InputCommand *phead);		//“语音控制”加入指令链表函数声明

voiceControl.c

#include "inputCommand.h"int voiceInit(struct InputCommand *voice)
{int fd;if ((fd = serialOpen (voice->deviceName, 115200)) < 0) { fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ; return 1 ; }voice->fd = fd;return fd;
}int voiceGetCommand(struct InputCommand *voice)
{int nread = 0;nread = read(voice->fd, voice->command, sizeof(voice->command));    //读取串口return nread;            //返回读取到数据的字节数,实际读取的指令放到了command里
}struct InputCommand voiceControl = {.commandName = "voice",.deviceName = "/dev/ttyS5",.command = '\0',.Init = voiceInit,.getCommand = voiceGetCommand,.log = {'\0'},.next = NULL
};struct InputCommand* addVoiceControlToInputCommandLink(struct InputCommand *phead)	//“语音控制”(对象)加入指令方式链表函数
{if(phead == NULL){return &voiceControl;}else{voiceControl.next = phead;phead = &voiceControl;return phead;}
}

测试结果

二、串口语音控制部分

智能公元/AIOT快速产品化平台 (smartpi.cn)

void Command(struct InputCommand* CmdHandler)
{struct Devices *tmp =NULL;if(strcmp("OL1",CmdHandler->command) == 0){tmp = findDeviceByName("livingroomLight",pdeviceHead);if(tmp != NULL){tmp->open(tmp->pinNum);printf("已打开客厅灯\n");}}if(strcmp("CL1",CmdHandler->command) == 0){tmp = findDeviceByName("livingroomLight",pdeviceHead);if(tmp != NULL){tmp->close(tmp->pinNum);printf("已关闭客厅灯\n");}}if(strcmp("OL2",CmdHandler->command) == 0){tmp = findDeviceByName("restaurantLight",pdeviceHead);if(tmp != NULL){tmp->open(tmp->pinNum);printf("已打开餐厅灯\n");}}if(strcmp("CL2",CmdHandler->command) == 0){tmp = findDeviceByName("restaurantLight",pdeviceHead);if(tmp != NULL){tmp->close(tmp->pinNum);printf("已关闭餐厅灯\n");}}if(strcmp("OL3",CmdHandler->command) == 0){tmp = findDeviceByName("bedroomLight",pdeviceHead);if(tmp != NULL){tmp->open(tmp->pinNum);printf("已打开卧室灯\n");}}if(strcmp("CL3",CmdHandler->command) == 0){tmp = findDeviceByName("bedroomLight",pdeviceHead);if(tmp != NULL){tmp->close(tmp->pinNum);printf("已关闭卧室灯\n");}}if(strcmp("OL4",CmdHandler->command) == 0){tmp = findDeviceByName("bathroomLight",pdeviceHead);if(tmp != NULL){tmp->open(tmp->pinNum);printf("已打开浴室灯\n");}}if(strcmp("CL4",CmdHandler->command) == 0){tmp = findDeviceByName("bathroomLight",pdeviceHead);if(tmp != NULL){tmp->close(tmp->pinNum);printf("已关闭浴室灯\n");}}if(strcmp("OLALL",CmdHandler->command) == 0){tmp = findDeviceByName("livingroomLight",pdeviceHead);if(tmp != NULL)  tmp->open(tmp->pinNum);tmp = findDeviceByName("restaurantLight",pdeviceHead);if(tmp != NULL)  tmp->open(tmp->pinNum);tmp = findDeviceByName("bedroomLight",pdeviceHead);if(tmp != NULL)  tmp->open(tmp->pinNum);tmp = findDeviceByName("bathroomLight",pdeviceHead);if(tmp != NULL)  tmp->open(tmp->pinNum);printf("已打开所有灯\n");}if(strcmp("CLALL",CmdHandler->command) == 0){tmp = findDeviceByName("livingroomLight",pdeviceHead);if(tmp != NULL)  tmp->close(tmp->pinNum);tmp = findDeviceByName("restaurantLight",pdeviceHead);if(tmp != NULL)  tmp->close(tmp->pinNum);tmp = findDeviceByName("bedroomLight",pdeviceHead);if(tmp != NULL)  tmp->close(tmp->pinNum);tmp = findDeviceByName("bathroomLight",pdeviceHead);if(tmp != NULL)  tmp->close(tmp->pinNum);printf("已关闭所有灯\n");}
}

网络服务器线程控制也可以调用

智能家居项目目录

智能家居(1) —— 工厂模式引入&工厂模式实现继电器控制

智能家居(2) —— 工厂模式实现烟雾报警

智能家居(3) —— 串口通信(语音识别)线程控制

智能家居(4) —— 网络服务器线程控制

智能家居(5) —— 智能家居项目整合(语音控制线程,网络控制线程、烟雾报警线程)

网络编程知识预备(1) —— 7层OSI网络模型

网络编程知识预备(2) —— 三次握手与四次挥手、半连接状态、2MSL

网络编程知识预备(3) —— TCP流量控制(滑动窗口)、拥塞控制

网络编程知识预备(4) —— SOCKET、TCP、HTTP之间的区别与联系

网络编程知识预备(5) —— 了解应用层的HTTP协议与HTTPS协议

网络编程知识预备(6) —— libcurl库简介及其编程访问百度首页

智能家居(6) —— 香橙派摄像头安装实现监控功能

智能家居(7) —— 人脸识别 & 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)

智能家居(8) —— 香橙派摄像头加入设备工厂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65556.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[第一步]homekit智能家居,homebridge与homebridge-aqara通信协议

根据这个就可以使用iphone控制灯与开关. 折腾了3个晚上,终于将homebridge安装好,安装之前需要安装一堆的库,比如node.js运行环境等,因为网上资料大部分都是在树莓派上面运行,我是直接在ubuntu上面进行的测试,因为安装会有所区别,但是安装好之后就一样了,安装方法在此我就不写了…

智能家居系统 QT

一 环境范围设置 &#xff08;1&#xff09;界面添加新控件 在mainwindow.ui 添加控件&#xff1a; 控件的类型 文本内容 对象名&#xff08;唯一&#xff09; 是否有槽函数 QLabel <温度< lable_随意 否 QLabel <湿度< lable_随意 否 QLabel <光…

Home Assistant 智能家居自动化

一、Home Assistant 自动化中的一个重要概念——模式 引入模式&#xff0c;用于解决正在执行过程中的同一规则又一次被触发的问题 二、Home Assistant 自动化规则的组成部分 2.1 触发条件Trigger&#xff1a;表示智能家居中事件或状态的转换 可选持续时间(特有) trigger有…

qt实现智能家居系统

一、项目介绍 通过TCP/IP协议实现客户端和和服务端的链接&#xff0c;服务端和下位机通过串口通信的方式链接&#xff0c;传递信息&#xff0c;客户端通过账号登录进入进入智能家居服务系统&#xff0c;账号登录和QQ登录类似&#xff0c;我采用的是数据库的方式实现数据的存储和…

语音识别智能家居控制设计

目录 一、方案流程及技术规格书设计 二、系统硬件电路设计 三、软件编写及调试 四、系统调试测试与分析 前言 随着科学技术的快速发展&#xff0c;人们对生活品质的要求也不断提高&#xff0c;开始追求更好更方便的生活方式。因此&#xff0c;智能家居系统应运而生。智能家…

智能家居之网关

网关诞生的背景 很多物联网终端设备在设计之初就考虑了低功耗、低成本的需求&#xff0c;因此大量的物联网终端设备是靠电池来工作并且需要运行相当长的一段时间&#xff0c;比如油田、农业相关的传感器&#xff0c;且这些终端设备不需要实时与物联网平台通讯&#xff0c;甚至…

智能家居是否可与ChatGPT深度融合?

​ ChatGPT自2022年面世以来&#xff0c;已为亿万网民提供智能问答服务。然而我们是否曾想到&#xff0c;这一人工智能驱动的聊天机器人&#xff0c;是否可为智能家居赋能? 要实现ChatGPT与智能家居设备之间的无缝对话&#xff0c;单单依靠一台终端是远远不够的。ChatGPT必须…

调查报告数据分析怎么做?

调查报告数据分析怎么做&#xff1f;拿到一份调查报告看选题、选题内容、调查的目的&#xff0c;然后清洗数据&#xff0c;分析数据提炼观点&#xff0c;过数据变化规律&#xff0c;揭示事物内在发展变化和趋势&#xff0c;抓住问题的本质和关键。 一、分析数据提炼观点 数据分…

pyqt5制作翻译软件+爬虫

VSCpythonmysql&#xff0c; 文章目录 目录 文章目录 前言 一、详细代码 第一个文件Ui_untitled.py 第二个fy_main.py文件&#xff1a; 第三个 &#xff1a;bd_pachong.py 二、登录界面&#xff1a; 总结 前言 通过pyqt5实现了翻译界面的可视化&#xff0c;利用python爬虫实现了…

给 30 岁左右的你三个职场跃迁/改变命运的建议!

见字如面&#xff0c;我是军哥&#xff01; 通过公众号的后台用户画像数据&#xff0c;我发现我的读者在 26 到 32 岁的年龄阶段的人数最多&#xff0c;所以今天来聊一聊这个话题&#xff0c;你一定要看到最后&#xff0c;会让你少走很多弯路&#xff01; 核心观点主要包括三个…

38岁程序员和你分享4个人生经验!

蓝色关注&#xff0c;回复“1”获取知名公司程序员和产品经理职级 这是我的第「123」篇原创文章 见字如面&#xff0c;我是军哥。 我最近一直想写一篇稍微长点的文章&#xff0c;毕竟内容篇幅有时候决定内容广度和深度。 距离我之前写的那篇文章《一位互联网老兵的五次认知升级…

【我命由我不由天】30多岁的大龄程序员,应该如何保持职场竞争力?

公众号后台回复“学习”&#xff0c;获取作者独家秘制精品资料 扫描下方海报二维码&#xff0c;试听课程&#xff1a; &#xff08;课程详细大纲&#xff0c;请参见文末&#xff09; 目录 回首往事&#xff1a;自己竟没有任何核心优势&#xff01;公司遇到危机时&#xff0c;大…

写给互联网人35岁之后的建议

作者介绍 李凯东 某大厂大数据总监&#xff0c;管理经验丰富&#xff1b; 负责数据、用户、搜索、推荐、AI等&#xff1b; 曾有10年连续创业经历&#xff1b; 产研运全能&#xff0c;国内知名比赛获奖无数&#xff1b; “数据人创作者联盟”成员。 又到了春节&#xff0c…

程序员如何跨越35岁危机?这篇给点干货建议!

职场&认知洞察 丨 作者 / findyi 这是findyi公众号的第83篇原创文章 这两天在我的读者群里做了一个职业小调研&#xff0c;发现关注我公众号的70%以上都是程序员。 毕竟程序员吸引程序员&#xff0c;这也算猿粪吧&#xff0c;哈哈。 这个小调研也引发大家对程序员行业的激烈…

35岁是人生分水岭?一定要做这7件事

在网上看到这样的帖子&#xff0c;说的是35岁以上的员工&#xff0c;有人脉的卖保险&#xff0c;没人脉的跑滴滴&#xff0c;实在不行送外卖。招聘时&#xff0c;35岁以下优先。调整时&#xff0c;35岁以上优化。对绝大数人来说&#xff0c;35岁是一道坎&#xff0c;35岁是人生…

32岁大龄女程序员的职场经历总结,分享重回职场的感受

不知不觉已经三十过二&#xff0c;我2016年研究生毕业就来到了苏州一家国企。我对自己并没有清晰的职业规划&#xff0c;还记得来这家公司面试时&#xff0c;面试官问我&#xff0c;为啥选择我们公司。我说因为他是国企又有互联网公司的性质&#xff0c;即稳定又能写代码&#…

麦肯锡:给20、30岁职场年轻人的14条建议!条条珍贵

点击“技术领导力”关注∆ 每天早上8:30推送 来源&#xff1a; 《麦肯锡决断力》 1、 选择工作的标准: 选择有利于自己成长的公司&#xff1b; 选择可以从事国际性工作的公司&#xff1b; 选择可以充分发挥自身能力&#xff0c;创造出价值&#xff0c;并且可以为社会做出贡献…

给还没到35岁中年危机的程序员们一些建议

前言 上周&#xff0c;我一个同学被柔性辞退了&#xff0c;是一个外企&#xff0c;给了n 1的补偿&#xff0c;十来万人民币。他在那家公司干了三年多&#xff0c;毕业十年换过四家单位&#xff0c;都是国企或者外企。他今年三十四岁&#xff0c;年前就知道要走的消息&#xff…

30岁程序员回顾人生、展望未来

活动地址&#xff1a;http://blog.csdn.net/blogdevteam/article/details/42172979 一、回顾毕业以来这么多年走过的路 从2007年7月份走出校门到今天2014年12月份&#xff0c;已经整整7年半了。想想7年半之前的自己&#xff0c;再看看现在的我&#xff0c;这么多年走过的路&a…

作为40岁的IT过来人,我有3个建议想对年轻程序员说!

见字如面&#xff0c;我是军哥&#xff01; 我刚毕业的时候也认为技术可以改变世界&#xff0c;如今 40 岁了&#xff0c;N 多年过去了觉得太可笑了&#xff01; 我总结了三个点&#xff0c;分享给年轻的程序员&#xff0c;请一定要看到最后哦&#xff5e; 1、 大部分公司的程序…