嵌入式实践|建立一个智能家具远程控制系统

嵌入式大杂烩 2022-12-01 21:30

关于物联网,我觉得灵魂还是在软件上,前端的各种硬件联网标准一旦形成也就没啥事了,更多的仍然是数据的存储,分析。

其实,物联网说白了更是一种数据服务一条龙。从数据的采集到数据的传送以及数据的存储和处理。

数据的传送就不用说了,属于通信的范畴,属于宽带和三大运营商的领地,数据的的采集属嵌入式的范畴,数据的存储可能一般的程序员和DBA就可以搞定,最有核心的部分就是数据的分析了,只可惜做数据挖掘和大数据处理的,大都是博士和硕士级别的吧!

所以做为一名普通的二本毕业生,我准备将目标锁定在嵌入式的方向,准确的说是嵌入式软件开发工程师。

一直以来常常张口物联网,闭口智能家具,终于在最后的时间里,付出了实践,做了一个基于嵌入式Linux的智能家具远程控制系统,当然系统在不断的完善,目前已经实现了远程控制和环境信息实时上传的功能。希望各路大牛,多拍板砖,多提指导性意见。

本文的主要目标是展示系统的服务器,关于嵌入式环境搭建/驱动的编写,不详细说明。

在实现智能家居控制系统之前,我们需要搭建一个人机交互界面,这里我主要采用了HTML页面,也就是最终实现的目标是,人们可以在有网络的地方登陆位于家里的嵌入式WEB服务器,然后通过这些网页来进行用电器的操控,同时,也可以将家里的实时环境值传送到HTML页面,你可以远程查看居室内的环境信息,远程为家人打开空气净化器或者是空调。

0.开发准备

宿主机:Ubuntu操作系统

开发板:FriendlyARM mini2440

驱动程序:LED驱动,温度传感器驱动

相关技术准备:Socket编程/HTTP协议/JavaScript

1.实现WEB服务器

嵌入式虽然小,但还是有一批开源的服务器是可供选择的,比如大名鼎鼎的boa,小巧强悍。

实用 | 10分钟教你搭建一个嵌入式web服务器

我在最开始的时候也是选择移植boa服务器作为智能家具的服务器,但是后来在添加家具控制模块和温度传输模块的时候觉得很不方便,于是呼就决定手动打造一个服务器,虽然和boa相差十万里,但是学到的东西也更多,而且对web的机理有了更深刻的认识,觉的作为一个学习者,值了。

在徒手开发服务器之前,你必须要知道,web底层的工作机理,说到这里有一个段子,有一次我去面试,岗位是java web,boss问我你对web有什么认识,我随口一说:“其实web说到底就是socket和http”,后来在一次聚餐的时候boss给我说:“当听到一个还未毕业的学生对web能有如此认识,感到很意外,所以即使你没有经验我也还是会雇佣的。”看来,有时候吹牛逼真的很管用,哈哈。

虽然是吹牛逼,但web的实质的确是socket和http协议,浏览器端我不清楚也就不乱说了,但是我擦浏览器里面一定有个socket来和我们的服务器进行通信。

接下来详细说说我们的服务器端,服务器要想和浏览器取得通信,首先需要建立一个socket,然后就是传统的网络编程,但是要注意,服务器和浏览器进行“对话时”,使用的是“HTTP”语言。

也就是说web的实质是HTML+SOCKET+浏览器。然而socket又是tcp/ip协议的程序实现层,因此web的实质就是html+TCP/IP+浏览器。然而HTML的实质又是文件,因此web的实质又是 文件+TCP/IP+浏览器(文件翻译器(特殊文件翻译器))。关于浏览器我是在研究的不多,不敢乱说。

因此,总结成一句话就是:“WEB就是向一台被称为服务器的计算机上请求文件,服务器将指定文件发送到浏览器,然后浏览器解析文件并展示的一个过程”。

server_sockfd=socket(AF_INET,SOCK_STREAM,0);
if(server_sockfd<0)
{
    printf("create socket failed!\n");
    exit(EXIT_FAILURE);
}
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(PORT);
server_addr.sin_addr.s_addr=INADDR_ANY;

if(bind(server_sockfd,(struct sockaddr*)&server_addr,sizeof(server_addr))!=0)
{
    printf("bind error!\n");
    exit(EXIT_FAILURE);
}

经过上面的操作,已经为服务器创建了一个socket,也为socket绑定ip地址和端口,这样一来,就为我们的服务器在茫茫的网络海洋中有了准确的定位。关于socket和sockaddr_in,我一直是这样理解的,一个socket相当于一部手机,如果你想别人能够打通你的手机,首先你要有一个SIM卡,而这个sockaddr_in则相当于sim卡,一旦和你手机绑定后,别人(客户端)就可以向你发起呼叫。接下来就是socket编程的一般步骤,Listen和accpect,相当于你的手机装上了SIM卡并且打开了手机,等待别人的呼叫。

client_sockfd=accept(server_sockfd,(struct sockaddr*)&client_addr,&addr_len);

accpect函数实现阻塞程序的继续进行,直到有客户端发起请求,当有客户端发起请求的话,accpect函数返回这个链接的描述符号。返回的结果代表客户端与服务器的链接描述,下面可以直接用这个描述符来代表已经建立的链接关系。

进行到此时,好比一个人拨通了你的电话并且你接听了电话,此刻你们的链接建立了。你可以用耳朵贴在话筒上听那人说了些什么,在我们的程序里你同样可以用recv来接听客户端都发送了那些请求。

其中,buffer代表接收到客户端请求信息以及该客户端的相关信息。仿佛那人给你说的那些话。

关于buffer会是什么内容,相信没有接触过的人都很好奇,我也一样,于是乎打印了出来(前提是我在浏览器地址栏输入了http:127.0.0.1:8000/main.html):

int recv_len=recv(client_sockfd,buffer,sizeof(buffer),0);

其中,buffer代表接收到客户端请求信息以及该客户端的相关信息。仿佛那人给你说的那些话。

关于buffer会是什么内容,相信没有接触过的人都很好奇,我也一样,于是乎打印了出来(前提是我在浏览器地址栏输入了http:127.0.0.1:8000/main.html):c

GET /main.html HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive

接下来就发现了这些有意思的东西(不要笑我,我真的是小白),第一次看见这东西真的很惊奇。看到了这里我瞬间明白了很多东西:

1 如果我又一个服务器,我能知道,那些ip访问了我的服务器,访问了多少次,地理位置在哪里。

2 我知道了他用的什么浏览器

3 我知道了他的主机是什么系统,还有有关本次链接使用的语言/编码方式/链接类型。。。

其实,我们最关心的就是第一句,第一句是它(客户端)想GET main.html;意思是浏览器想向服务器请求main.html。

好了,如果你想在浏览器成功展示出main.html,你需要将main.html整个文件发送给客户端,但是请注意第一句“GET /main.html HTTP/1.1”,有没有发现它们有着特殊的形式,这就是WEB的语言吧,暂且这样称呼它。

如果我们直接调用write函数将main.html发送给客户端,客户端会不会觉得太迷茫,它会觉得发了一坨什么东西,因此在这里服务器也要以类似的形式首先给浏览器发送一段类似的文字然后将整个main.html文件发送过去:

发送main.html的完成代码如下:

HTTP/1.1 200 OK\r\n
Conten-Type:html\r\n

发送main.html的完成代码如下:

sprintf(buffer,"HTTP/1.1 200 OK\r\n"\
                   "Conten-Type:%s\r\n"\
                   "\r\n",mine_type);
int file_length=strlen(buffer);
do{
    if(write(socket_fd,buffer,file_length)<0)
    {
        close(fd);
        break;
    }
}while((file_length=read(fd,buffer,sizeof(buffer)))>0);

其中mine_type为文件的类型,比如jif,png,html等等。至此,一个完整的会话就完成了,一个超级无敌简易的网页浏览器也就搞定了。

2.智能家具控制模块

严格的说,这是web服务器的扩展模块,就是这个服务器不仅能够提供网页的文件资源,还可以调用驱动来进行硬件的操作。比如要进行灯光控制,在html页面里有一个灯泡的图片按钮,当点击按钮的时候,用JavaScript想后台发送制定的请求内容,比如发送请求内容为:“myled.cgi”,注意这里的后缀不代表请求一个cgi的文件,因为服务器是自己的写的自己解析的,想代表什么自己说了算,就tm这么任性和这么爽!这里我指定它代表灯光控制部分。

int recv_len=recv(client_sockfd,buffer,sizeof(buffer),0);
 printf("*****%d bytes recved!***********\n",recv_len);
 p_buffer=buffer;
 if(0==strncmp("GET /myled.cgi",buffer,14))
 {
      printf("hello,heat nan!\n");
      send_light_cmd(p_buffer,client_sockfd);
 }

以上的代码,我首先判断它请求的操作是否为灯光操作,如果是则将这些信息作为参数传递给灯光模块处理。关于灯光模块分为两个部分,一个部分是确定对那个灯进行操作,第二个部分是执行硬件操作,如果是用电器的开关 ,则主要是设置与用电器绑定的IO口电平。

3.实时环境信息模块

关于实时环境信息模块和智能家具控制模块如出一辙,首先当用户进入环境信息界面,ajax主动向服务器每10s发送一次温度请求,服务器接受到指令后,马上调用温度传感器驱动采集一次温度,然后将温度传递到前端的html页面,如此让用户每隔10ms看到家里的温度一次,也算实时吧!

至此,一个家居远程控制系统就算完成了,不能叫系统吧!此时感觉如此之小 ,叫个小demo吧!

此时此刻,家里的电器确实是连上网了,应该可以叫做“物联网了吧!” 如果将采集的温度值不断的和设定喜好温度值作比较从而让程序自动控制空调和地暖的开关,这应该叫“智能家居了吧!”。然而,这应该是现实的物联网;理想的物联网应该是这样:

你的空调会受到一个巨大的数据平台做支持,这个数据平台分别连接了最权威的健康机构,可以提供不同时节/不同时间段最健康的温度,你的空调会和你的手机相互通信,手机会告诉空调,孩子主人距离家里10公里,请你立马工作。

空调应当会有记忆功能,分别记住主人在不同时段,不同季节最喜爱的温度,你的空调应当和你的手环相连,当你在左手跟着右手一个慢动作的时候,手环会向空调发出指令,孩子主人心跳加速,体温上升,速度降温,从而不会让你大汗淋漓。

如果当这一天真的来临,请叫他真正的物联网时代吧!

来源:https://www.cnblogs.com/heat-man/p/4564539.html

版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。

注意

由于微信公众号近期改变了推送规则,为了防止找不到,可以星标置顶,这样每次推送的文章才会出现在您的订阅列表里。

猜你喜欢:

实用 | 10分钟教你搭建一个嵌入式web服务器

嵌入式设备AP配网实例分享

嵌入式Linux单板连接飞燕物联网平台

分享一种灵活性很高的协议格式(附代码例子)

嵌入式大杂烩周记 | 第 16 期

嵌入式大杂烩周记 | 第 15 期

访问非法内存为什么不会出错?

嵌入式大杂烩周记 | 第 14 期

分享几个实用的代码片段(第二弹)

分享一种你可能不知道的bug定位方法

分享一种修改配置文件的方法

《嵌入式大杂烩周记第 13 期:lz4》

《嵌入式并行多线程处理器,了解一下!》

《分享一种修改配置文件的方法》

《分享几个实用的代码片段(附代码例子)》

《废旧板子再利用:搭建无线调试环境!》

《嵌入式段错误的3种调试方法汇总!》

《简说TCP通信非阻塞接收(附代码例子)》

《TCP通信常用接口的使用封装》

《嵌入式软件中,总线错误的坑?替大家先踩一步》

《分享嵌入式软件调试方法及几个有用的工具!》

《分享两点提高编程能力的建议!》


在公众号聊天界面回复1024,可获取嵌入式资源;回复 ,可查看文章汇总

嵌入式大杂烩 专注于嵌入式技术,包括但不限于C/C++、嵌入式、物联网、Linux等编程学习笔记,同时,内包含大量的学习资源。欢迎关注,一同交流学习,共同进步!
评论
  • 在智能网联汽车中,各种通信技术如2G/3G/4G/5G、GNSS(全球导航卫星系统)、V2X(车联网通信)等在行业内被广泛使用。这些技术让汽车能够实现紧急呼叫、在线娱乐、导航等多种功能。EMC测试就是为了确保在复杂电磁环境下,汽车的通信系统仍然可以正常工作,保护驾乘者的安全。参考《QCT-基于LTE-V2X直连通信的车载信息交互系统技术要求及试验方法-1》标准10.5电磁兼容试验方法,下面将会从整车功能层面为大家解读V2X整车电磁兼容试验的过程。测试过程揭秘1. 设备准备为了进行电磁兼容试验,技
    北汇信息 2025-01-09 11:24 103浏览
  • 车机导航有看没有懂?智能汽车语系在地化不可轻忽!随着智能汽车市场全球化的蓬勃发展,近年来不同国家地区的「Automotive Localization」(汽车在地化)布局成为兵家必争之地,同时也是车厂在各国当地市场非常关键的营销利器。汽车在地化过程中举足轻重的「汽车语系在地化」,则是透过智能汽车产品文字与服务内容的设计订制,以对应不同国家地区用户的使用习惯偏好,除了让当地车主更能清楚理解车辆功能,也能进一步提高品牌满意度。客户问题与难处某车厂客户预计在台湾市场推出新一代车款,却由于车机导航开发人
    百佳泰测试实验室 2025-01-09 17:47 33浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球中空长航时无人机产值达到9009百万美元,2024-2030年期间年复合增长率CAGR为8.0%。 环洋市场咨询机构出版了的【全球中空长航时无人机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球中空长航时无人机总体规模,包括产量、产值、消费量、主要生产地区、主要生产商及市场份额,同时分析中空长航时无人机市场主要驱动因素、阻碍因素、市场机遇、挑战、新产品发布等。报告从中空长航时
    GIRtina 2025-01-09 10:35 100浏览
  • 在过去十年中,自动驾驶和高级驾驶辅助系统(AD/ADAS)软件与硬件的快速发展对多传感器数据采集的设计需求提出了更高的要求。然而,目前仍缺乏能够高质量集成多传感器数据采集的解决方案。康谋ADTF正是应运而生,它提供了一个广受认可和广泛引用的软件框架,包含模块化的标准化应用程序和工具,旨在为ADAS功能的开发提供一站式体验。一、ADTF的关键之处!无论是奥迪、大众、宝马还是梅赛德斯-奔驰:他们都依赖我们不断发展的ADTF来开发智能驾驶辅助解决方案,直至实现自动驾驶的目标。从新功能的最初构思到批量生
    康谋 2025-01-09 10:04 99浏览
  • Snyk 是一家为开发人员提供安全平台的公司,致力于协助他们构建安全的应用程序,并为安全团队提供应对数字世界挑战的工具。以下为 Snyk 如何通过 CircleCI 实现其“交付”使命的案例分析。一、Snyk 的挑战随着客户对安全工具需求的不断增长,Snyk 的开发团队面临多重挑战:加速交付的需求:Snyk 的核心目标是为开发者提供更快、更可靠的安全解决方案,但他们的现有 CI/CD 工具(TravisCI)运行缓慢,无法满足快速开发和部署的要求。扩展能力不足:随着团队规模和代码库的不断扩大,S
    艾体宝IT 2025-01-10 15:52 52浏览
  • 职场是人生的重要战场,既是谋生之地,也是实现个人价值的平台。然而,有些思维方式却会悄无声息地拖住你的后腿,让你原地踏步甚至退步。今天,我们就来聊聊职场中最忌讳的五种思维方式,看看自己有没有中招。1. 固步自封的思维在职场中,最可怕的事情莫过于自满于现状,拒绝学习和改变。世界在不断变化,行业的趋势、技术的革新都在要求我们与时俱进。如果你总觉得自己的方法最优,或者害怕尝试新事物,那就很容易被淘汰。与其等待机会找上门,不如主动出击,保持学习和探索的心态。加入优思学院,可以帮助你快速提升自己,与行业前沿
    优思学院 2025-01-09 15:48 102浏览
  • 在当前人工智能(AI)与物联网(IoT)的快速发展趋势下,各行各业的数字转型与自动化进程正以惊人的速度持续进行。如今企业在设计与营运技术系统时所面临的挑战不仅是技术本身,更包含硬件设施、第三方软件及配件等复杂的外部因素。然而这些系统往往讲究更精密的设计与高稳定性,哪怕是任何一个小小的问题,都可能对整体业务运作造成严重影响。 POS应用环境与客户需求以本次分享的客户个案为例,该客户是一家全球领先的信息技术服务与数字解决方案提供商,遭遇到一个由他们所开发的POS机(Point of Sal
    百佳泰测试实验室 2025-01-09 17:35 115浏览
  • HDMI 2.2 规格将至,开启视听新境界2025年1月6日,HDMI Forum, Inc. 宣布即将发布HDMI规范2.2版本。新HDMI规范为规模庞大的 HDMI 生态系统带来更多选择,为创建、分发和体验理想的终端用户效果提供更先进的解决方案。新技术为电视、电影和游戏工作室等内容制作商在当前和未来提供更高质量的选择,同时实现多种分发平台。96Gbps的更高带宽和新一代 HDMI 固定比率速率传输(Fixed Rate Link)技术为各种设备应用提供更优质的音频和视频。终端用户显示器能以最
    百佳泰测试实验室 2025-01-09 17:33 124浏览
  • 一个真正的质量工程师(QE)必须将一件产品设计的“意图”与系统的可制造性、可服务性以及资源在现实中实现设计和产品的能力结合起来。所以,可以说,这确实是一种工程学科。我们常开玩笑说,质量工程师是工程领域里的「侦探」、「警察」或「律师」,守护神是"墨菲”,信奉的哲学就是「墨菲定律」。(注:墨菲定律是一种启发性原则,常被表述为:任何可能出错的事情最终都会出错。)做质量工程师的,有时会不受欢迎,也会被忽视,甚至可能遭遇主动或被动的阻碍,而一旦出了问题,责任往往就落在质量工程师的头上。虽然质量工程师并不负
    优思学院 2025-01-09 11:48 115浏览
  • 1月9日,在2025国际消费电子展览会(CES)期间,广和通发布集智能语音交互及翻译、4G/5G全球漫游、随身热点、智能娱乐、充电续航等功能于一体的AI Buddy(AI陪伴)产品及解决方案,创新AI智能终端新品类。AI Buddy是一款信用卡尺寸的掌中轻薄智能设备,为用户带来实时翻译、个性化AI语音交互助手、AI影像识别、多模型账户服务、漫游资费服务、快速入网注册等高品质体验。为丰富用户视觉、听觉的智能化体验,AI Buddy通过蓝牙、Wi-Fi可配套OWS耳机、智能眼镜、智能音箱、智能手环遥
    物吾悟小通 2025-01-09 18:21 38浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦