- 博客(131)
- 资源 (6)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 I2C子系统框架
1 I2C子系统框架概述:1.1 I2C驱动有4个重要的名词I2C总线、I2C驱动、I2C设备、I2C设备器,对应的解释如下:1)、I2C总线:维护着两个链表(I2C驱动、I2C设备),管理I2C设备和I2C驱动的匹配和删除等2)、I2C驱动:对应的就是I2C设备的驱动程序3)、I2C设备:是具体硬件设备的一个抽象4)、I2C设配器:用于I2C驱动和I2C设备间的通用,是SOC上I2C控制器的一个抽象1.2 I2C子系统框架概述(1)内核初始化platform_bus和i2c_bus。(2
2021-03-22 21:53:05
564
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 platform总线框架
1、platform总线简介linux内核中,有IIC、SPI、PCI、USB等实体总线。但是SOC上的有些外设(eg:LED,定时器……),他们是直接通过内存的寻址空间来进行寻址的,cpu与这些设备通信是不需要总线的。为了对设备进行统一的管理,对这些直接通过内存寻址的设备虚拟了一条platform虚拟总线,所有直接通过内存寻址的设备都映射到这条总线上。2、platform总线的优点:1)、实现驱动的分离。通过platform总线,驱动和设备是分开注册的。通过platform总线的probe,可以随时
2021-03-20 12:10:51
1231
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于QT开发多人聊天项目1: 总体框架分析
1 项目框架1.1 这个项目框架是典型的c/s模型。服务器等待,等待客户端的请求。客户端发送一个请求,服务器端就应答一个请求。如果客户端不发送数据,服务器端是不会主动给客户端发送数据的。1.2 整个项目,客户端用qt来实现;服务器端,用linux+socket的方式来实现。2、功能分析项目要实现三个功能:客户端登录服务器;客户端显示在线列表;与列表中指定人聊天2.1客户端登录服务器功能实现:客户端成功登录以后,服务器要给这个客户端分配一个唯一的id(对于服务器来说,一个id,对应一个在线用户),
2021-03-04 16:08:33
1220
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 I.MX6ULL开发板基于阿里云项目实战 1:总体框架描述
全部资料:1、https://blog.csdn.net/cainiaofu/article/details/114262377?spm=1001.2014.3001.55012、https://download.csdn.net/download/cainiaofu/155042601、设备和服务器之间的框架1.1、Mqtt:总结就是基于topic的发布和推送的协议(topic就相当于是名字)通过向指定的topic发送消息的方式将数据发送到阿里云物联网平台,也可以通过订阅指定的topic从阿里云
2021-03-01 17:58:44
878
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 正点原子I.MX6ULL开发板车牌识别项目实战 1
1 项目总体概述下图为 车牌识别项目 的系统框图。借助这个框图,简要介绍项目的总体思路和所需要做的准备工作。1.1 总体思路通过摄像头采集图像信息,并将图像信息传递开发板(这里使用的是OpenCv)。开发板收到图像信息之后,通过定时器,周期调用百度AI的接口,将图像信息发送给百度云,进行图像识别,同时,待识别的图片还会显示在开发板的屏幕上。识别成功后,车牌识别的结果会显示在屏幕上。效果图如下图所示:1.2 准备工作1)、在PC端搭建好Qt环境。2)、将Qt所使用的库拷贝到根文件系统中,并设置
2021-02-09 17:56:23
4086
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 基于阿里云生活物联网平台的智能家居(物联网,智能家居,STM32,阿里云生活物联网平台,人脸识别,语音识别,语音交互)
一、成果展示视频已经在B站上发布,欢迎指点。https://www.bilibili.com/video/BV1NA411v7fd/二、功能介绍功能1:借助阿里云服务器的物联网平台,使用手机APP实现远程数据的上传(如:温度、湿度等数据)以及控制指令的下发(如:开关窗帘、开关风扇等指令),打破了传统局域网的空间限制,实现了”随时、随地”访问和控制家居系统功能2:以红外感应器、液晶屏、摄像头、智能门为硬件基础,借助人脸识别技术构建出无接触式门禁系统,实现了”靠脸开门”的功能功能3:基于语音识别模块
2020-07-24 21:20:05
6222
27
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 STM32F103C8T6通过ESP8266连接阿里云物联网平台(附代码)
STM32F103C8T6连接阿里云物联网平台(1)—阿里云lot Studio控制 Web开发分享一下自己使用stm32f103c8t6通过ESP_01模块连接阿里云物联网平台,实现温湿度上传和控制命令下达的过程,能力有限,用的是最简单的方法,如有错误,多多担待。一、硬件选型1、 stm32f103c8t62、ESP_01 wifi模块3、其他二、硬件连接WSP_01STM32F103C8T6RXDPA2TXDPA3RESPA4VCC3.3
2020-05-24 21:42:39
29102
429
原创 mmap(内存映射)
1、mmap的引入我们都知道,应用程序是不能直接访问驱动程序的。对于数据量较小的数据交互,我们可以使用copy_to_usr()(read())和copy_from_usr()(write())来进行用户态buffer和内核态buffer之间的拷贝。但是,对于数据量较大的情况,还用这种方式进行buffer的拷贝,效率低下。为了解决这个问题,我们使用mmap()。将内核态的buffer映射到用户态,让APP直接在用户态进行读写。2、什么叫内存映射问题的引入:当我们同时运行两个程序:我们可以看出
2021-04-15 15:58:30
3871
原创 linux之定时器
1 问题的引入—》软件消抖在实际的应用中,如按键按下的的现象应该是:松开(高电平)-》按下(低电平)-》松开(高电平)但是由于实际按键的硬件原因导致的机械抖动,会导致产生多次中断,上报多次按键值。可是实际上,我们只要一次按键值。为了避免这种情况的发生1)、我们可以使用中断来处理,死等:在按键中断程序中,可以循环判断几十亳秒,发现电平稳定之后再上报。但是这样违背了中断的原则之一:将尽可能的快。2)、使用定时器每次产生中断,在中断执行函数中,我们做的不是读按键值,而是修改定时器的超时时间:
2021-04-15 15:28:09
293
原创 POLL机制
1、poll机制概述使用休眠和唤醒机制等待某个事件发生,方法简单。但是不能做其他事情。因为如果一个事件等待很久才发生,那么我就要一直等待。为了避免这种事情的发生,我们给他加上一个超时时间,这就是poll机制。2、实现流程其核心的实现流程如下:但是在内核中,他具体的实现方式如下:驱动程序部分:在应用程序中,可以指定poll的休眠时间:总结:对于POLL机制的使用,对于驱动编写人员来说,只是做了两件事情:1、使用poll_wait()函数,将线程放入等待队列(
2021-04-15 15:18:56
1780
1
原创 休眠与唤醒
本文的分享,基于获取按键值得历程:1、用户程序通过休眠与唤醒机制获取按键值图示2 重要函数分析这里,我们重点分析两个函数。1)、休眠函数2)、唤醒函数函数分析:wake_up函数哪里找到要唤醒的进程或者线程呢?答案就是他的参数:wq(wait queue),等待队列.他会从这个队列里面,取出线程。进行唤醒。当某个进程、线程要休眠的时候,他会调用休眠函数wait_event_xx将自己放入到等待队列中。event参数的含义是,false:不休眠。true:休眠。
2021-04-15 15:09:27
552
原创 linux中断系统中,重要的数据结构
1、硬件中断的发生这里举得例子有点难度,我们先来介绍一下:什么是共享中断?多个中断源,使用同一个GPIO引脚(这个GPIO引脚,已经配置好了,用做中断引脚)。2 中断系统中用到的关键结构体:3 硬件中断号和虚拟中断号3.1 假设,有两个中断,分别是GPIO1模块中的5号中断和GPIO2模块中的5号中断。虽然他们用的是同一号中断,但是属于不同的模块。显然,在设备树中,他们的配置是不同的。在设备树中,指定一个中断的方式如下://表示要使用的GPIO 1模块里面的引脚interrupt -
2021-04-15 14:59:45
149
原创 linux中,中断的处理方法的改进 中断线程化
前言之前使用的用内核线程去处理中断(任务队列),对于单CPU系统来说,是很高效的一种方式,但是随着CPU越来越多,这种方法就显得不是很高效。因为,一个CPU只能创建一个内核线程Kworker。多个中断的work都是由一个worker线程来处理。这会导致内核线程kworker对CPU的占用率过高,而其他CPU却空着。这对于多CPU系统来说,显然不能被接收!!1 改进改进的地方在于:我们不用再自己定义work结构体,也无需再使用函数schedule_work(&work)。我们可以使用reque
2021-04-15 14:55:17
409
原创 linux中,中断的处理方法 工作队列
1、前言为了提高中断的执行速度,我们将不是特别耗时的任务交给下半部tasklet来做(tasklet在在中断的上下文中工作,无法休眠),但是,当有非常复杂的操作需要执行的时候,如果依旧采用下半部tasklet来做,虽然系统依旧可以响应中断,但是,应用应用程序是不能执行的。因为整个系统都在执行软中断或是硬中断。将耗时的操作放在某一个线程(内核线程)去做,可以解决系统的卡顿问题,因为线程可以休眠。这就是工作队列。2 内核线程的介绍:内核会为我们自动创建一个kworker线程(一个CPU一个*),每个
2021-04-15 14:47:27
459
原创 RK3399 tftp和nfs服务器的搭建
自己编译buileroot固件,在uboot命令行ping不通虚拟机。无法使用tftp和nfs。排查流程:1、启动开发板,进入跟文件系统,参考正点原子的测试。发现tftp和nfs都无问题。排除,是tftp和nfs配置出错的原因,也排除防火墙原因。2、换用官方的buildroot固件,同样不能ping通。排除是编译问题。突发奇想。用ubuntu固件的u-boot,用自己编译的内核和buildroot的跟文件系统启动。结果,能启动内核,但是不能挂在跟文件系统。总结,和nfs有关,还未进行排查的地方
2021-04-10 22:07:10
520
原创 linux中,中断的处理方法 tasklet软中断
1、在linux中,对中断的处理有原则对中断的处理原则有两个:1)、中断不能嵌套中断(即使发生了更高优先级的中断)–》防止栈空间不够用。因为每个中断被执行,都要先保存现场。如果中断1在执行的过程中,嵌套了中断2;那么在中断2在被执行之前,中断1的现场应该先被保存(保存在栈中)。同样,如果还嵌套了其他中断,还要将现场保存在栈中。这样,就会发生一个问题,如果嵌套的中断很多,那么可能会导致栈空间不够用。为了避免这个问题,不允许中断嵌套。2)、对中断的处理应当越快越好。假设系统只有一个CPU,一个进程在执
2021-04-01 13:25:33
516
原创 linux系统对中断的处理
1、ARM处理器程序运行的过程扩展:1)、在CPU里面,有一个很重要的单元名叫MMU,内存管理单元。关于内存管理单元,有如下介绍:2)、进程控制块:PCB进程控制块(也叫做进程描述符)(位于内核空间):本质就是结构体(上百行)。注:每个程序都是一个进程,每个进程都有一个进程控制块。进程控制块位于虚拟内存(3G-4G(对于 32位系统来说))里面包含很多的内容,重点掌握以下部分:(1)、存放进程ID。系统的每一个进程有唯一的id。在c语言中,用pid_t类型表示。其实就是一个非负整数。p
2021-03-29 16:17:22
333
原创 异常与中断的概念以及处理流程
1、异常与中断的处理流程(中断属于异常):2、小节:中断函数是怎么被调用的????当有中断信号被cpu检测到,cpu会通过中断向量表,知道他要跳转到0x18地址。Cpu就会强制跳转这个地址(这个是由硬件决定的,硬件保证了cpu必须跳到0x18地址),我们在这个地址,放一条跳转指令ldr pc,_irq;根据这个指令,cpu会再次跳转,跳转到irq函数。函数做的事情是(这部分是由软件决定的):1)、保存现场。2)、处理异常–》执行不同的中断处理函数(在这个函数里面,做的事情是:分辨中断源;调用对
2021-03-29 16:14:07
1096
原创 framebuffer的显示原理以及缺点分析
1、概述在使用LCD的时候,存在这样两个问题:1)、linux内存中,对内存管理严格,显存需要申请,不能想用就用。2)、linux是工作在保护模式下的,每个应用程序都有自己的虚拟地址空间,这就导致应用程序不能直接访问LCD设备在内核中实际的物理缓冲区地址。为了解决上述问题,我们引入framebuffer,帧缓冲。注:1)、帧缓冲:是一种机制,通过framebuffer机制,应用程序可以直接操作内核里面的显存。2)、帧缓冲设备可以通过mmap()映射将屏幕缓冲区的物理地址映射到用户空间的的一块虚
2021-03-23 16:18:22
3112
原创 input子系统
1、简介:输入设备本质上还是字符设备,只是在此基础上套上了 input 框架。input子系统分为设备驱动层、核心层和事件处理层。1)、设备驱动层:负责和底层的硬件设备打交道,将底层硬件设备对用户输入的响应转换为标准的输入事件 ,发送给核心层。事实上,设备驱动层只关心如何驱动硬并获得硬件数据(eg:按下的按键的数据),然后直接调用核心层提供的接口函数即可。2)、核心层:负责对设备驱动层提供规范和接口,设备驱动层通过调用核心层提供的接口,然后核心层就会自动将数据发送给事件处理层。事实上,核心层和
2021-03-21 19:15:45
224
1
原创 pinctrl子系统
1、概述pinctrl子系统和GPIO子系统是linux驱动分离与分层的产物。对于大多数的 32 位 SOC 而言,引脚的设置基本都是设置某个 PIN 的复用功能、速度、上下拉等,然后再设置 PIN 所对应的 GPIO这两方面,因此 Linux 内核针对 PIN 的配置推出了 pinctrl 子系统,对于 GPIO的配置推出了 gpio 子系统。pinctrl子系统分融主要工作内容如下:1)、获取设备树树中pin的信息。2)、根据获取到的pin信息,来设置pin的复用。3)、根据获取到的pin信
2021-03-21 09:18:43
372
原创 GPIO子系统框架分析
1、作用:在裸机中,我们都是对寄存器直接进行操作的。而在Linux中,对于驱动开发者来说,对于已将引脚复用为GPIO的引脚,我们可以借助gpio子系统提供的函数,间接的来实现裸机中,对寄存器的操作。简单的理解,GPIO子系统就是用来GPIO进行初始化,并提供相应的API函数,供驱动开发者使用,无需驱动开发者再去设置GPIO。驱动开发人员要做的就是:在设备书下,创建节点,在节点中添加pinctrl信息(引脚的复用和电气属性信息)和gpio属性信息。然后,就可以通过使用gpio子系统提供的函数进行对GPI
2021-03-19 14:02:36
755
原创 图解递归法遍历二叉树
递归递归简单的理解,将一个大问题一点点分解成执行逻辑相同的小问题,从小问题开始,一层层的执行,直到解决大问题。存在的疑问:小问题解决了,他是怎么返回到上一层,继续执行的呢?答案就是。**系统栈!!!**这个栈,是系统提供的,我们在代码层面是看不到的。就像我们在word中,执行剪切操作,然后,再粘贴,就右可以出来,这个操作,其实就用到了系统栈。同理,我们在执行完一个小操作的时候,就会从栈中拿出上一步的状态,这样,就可以执行上一层的操作了。图例:递归法遍历的代码逻辑如下图:...
2021-03-14 23:09:03
494
原创 ARM开发板实战项目:在arm板部署tcp服务器,实现多人聊天
项目演示视频:客户端和服务端的编写过程如下:https://blog.csdn.net/cainiaofu/article/details/114370649客户端和服务端的代码如下:https://download.csdn.net/download/cainiaofu/15686451注:客户端是基于QT编写,服务器端是基于C语言编写。在客户端中,将IP写成是开发板IP,端口号和服务器端程序中的端口号一致即可。服务器端,将代码交叉编译,使代码可以在arm架构下运行。然后放到跟文件系统的目录
2021-03-09 19:39:44
640
1
原创 基于QT开发多人聊天项目6:总结
1、应用层协议的设计:要考虑到封包格式,可能带来的问题:1.1 以服务器给客户端回应的0X12 ID0 ID1 …为例。客户端不知道读到哪里结束,他就会一致读,可能读到的其他客户端给本客户端发来的数据。而客户端并不知道在哪里结束,所以,客户但机会误将其他客户端发来的数据当作是ID,进行显示。1.2 粘包问题:连续发了两次显示列表的命令,由于网络原因,可能同时发两个回来(如果不能确定每个数据包的长度)。同样不知道一个包是哪里开始,哪里就结束。为解决上述问题,我们通过采用定义包头包尾的方式(解决数据长
2021-03-09 19:17:17
1028
1
原创 基于QT开发多人聊天项目5:功能完善 多线程加锁以及网络的异常处理
1、服务器主动断开的处理如果服务器断开连接,用于通信的套接字就会产生一个disconnected()信号://如果服务器断开连接,客户端要收到提示connect(_socket, SIGNAL(disconnected()), this, SLOT(disconnected()));在槽函数中,执行相关的处理函数。2、网路异常处理如果网络突然断开,服务器和客户端将断开连接。此时,服务器收不到客户端的发来的信息,但是却没有相关的处理操作。 客户端这面,由于在qt层面已经做好了封装,会产生disc
2021-03-09 19:11:25
769
原创 Qt下实现16进制收发数据
16进制数据接收 //接收到的数据,保存在 info QByteArray info = serialPort->readAll(); //将数据转化成16进制显示 ui->receiveTextEdit->appendPlainText(info.toHex().toUpper());16进制数据发 //从LineEdit得到字符串 QString str = ui->sendEdit->text(); //将str字符串
2021-03-09 09:42:13
2239
原创 基于QT开发多人聊天项目4:获取在线列表功能和聊天功能的实现
1 获取在线列表功能实现1.1 、客户端这个功能,客户端的组包和解包的实现,和上一节的类似。只是要注意:为实时获得在线情况,我们需要用到定时器。通过定时器,周期的发送 获取在线列表 的数据包。1.2 服务器端为了能够保存客户端登录信息,我们使用链表,对客户端的登录信息进行保存。这里用到了链表的基本操作。参考博客:https://blog.csdn.net/cainiaofu/article/details/1085347312、聊天功能的实现2.1预期效果点击在线用户列表中的某个ID,
2021-03-06 23:27:24
1567
原创 基于QT开发多人聊天项目3:登录功能的实现
1 本功能实现的效果客户端通过IP和端口号与服务器建立连接;建立连接以后,客户端封装一个数据包“0x02 0x11 0x03”,发送给服务器;服务器收到这个数据包以后,先将这个数据包读出来“0x02 0x11 0x03”;读出来以后,进行解包。也就是:通过第二个字节,判断发来的数据包是什么类型的,根据类型,执行对应的操作。在这里,就是:当第二个字节是“0x11”的时候,就表示这是客户端发来的登录包;服务器需要回发给客户端服务器为他分配的唯一的ID号。客户端通过信号与槽机制,接受服务器发来的数据包。
2021-03-05 21:00:07
493
原创 基于QT开发多人聊天项目2: 搭建服务器以及客户端框架
1 客户端框架客户端就是使用qt编程,例程分析:https://blog.csdn.net/cainiaofu/article/details/1143135262 服务器框架2.1 服务器框架的选择可以采用的方案:多线程,多进程。多路IO复用1)、如果使用多进程服务器,会遇到的问题:用来存储用户登录信息的链表,应该是只有一份的,但是要给所有的进程共享(共享数据链表)。尽管,我们可以使用共享内存的方式来实现,但是,不方便。2)、而采用多线程服务器,那么,这个链表就可以共享了。而且,一个客户端
2021-03-05 17:31:58
917
原创 ARM开发板基于udp通信项目实战 2:项目总结(linux下udp编程和qt下udp编程的对比分析)
1、linux下的udp:UDP的c/s模型:相比于tcp,udp编程,客户端connect()函数以及服务端的accept()函数被舍弃;另外:listen()函数是设置同时监听的上限数。因此,在udp中,服务器端的listen()函数,可有可无!!服务端: lfd = socket(AF_INET,SOCK_DGRAM,0); bind(); listen(); 这个函数是设置同时监听的上限数。在udp中,可有可无(用不上)!! while(1){ recvfr
2021-03-03 21:35:51
495
1
原创 ARM开发板基于udp通信项目实战 1:总体描述
项目最终的效果,见视频:https://www.bilibili.com/video/BV1oX4y1G7L4/整体分析:QT下的udp通信1、流程图:2、框架介绍2.1 udp通信在qt中,实质没有客户端和服务器端的概念。因为对于udp(udp是面向无连接的)来说,客户端和服务器端的地位是相等的,因此,二者的代码也是一模一样的。2.2 udp通信在qt中,只有绑定以后,才可以接收数据;不绑定,只能发送数据。3、源码分析见博客:https://blog.csdn.net/cainiao
2021-03-03 21:28:56
417
1
原创 在qt下,实现基于udp通信
在qt下,udp通信的客户端和服务器程序是一模一样。我们是分析服务器端即可:#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this); udpSocket = new QUdpSocket; //背景 QPalette palette; pa
2021-03-03 21:20:19
461
1
原创 ARM开发板基于tcp通信项目实战 2:项目总结(linux下tcp编程和qt下tcp编程的对比分析)
1、TCP编程需要用到两个类:1.1 QtcpServer和QtcpSocket.TCP分为客户端和服务端。客户端用到QtcpSocket类;服务端用到了QtcpServer和QtcpSocket类。1.2、在编程之前,我们先了解一下这两个类的作用:QTcpServer:监听套接字,用于监听是否有客户端的连接。QTcpSocket:通信套接字,用于实现数据的收发,属于设备IO类。扩展:在QT中,提供IO设备类,这些设备具有读写子块的能力,提供了读写子块的接口:2、linux下的tcp通信2
2021-03-03 14:49:19
1155
1
原创 在qt下,实现基于tcp通信
server:#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget){ ui->setupUi(this); //实例化通信套接字和监听套接字 tcpServer = new QTcpServer(this); tcpSocket = new QTcpSocket(this); /
2021-03-03 14:39:26
301
1
原创 ARM开发板基于tcp通信项目实战 1:总体描述
项目最终的效果,见视频:https://www.bilibili.com/video/BV1ZX4y1G7uG/整体分析:QT下的tcp通信1、流程图:2、文字注释:在QT中,同样会使用三个套接字。服务器两个(监听套接字和通信套接字),客户端一个(通信套接字)。1)、服务器首先创建一个监听套接字。2)、当监听套接字接受到客户端的连接,会自动触发newconnect()信号,在对应的槽函数中,产生通信套接字。3)、如果是数据传送成功,对方的通信套接字会触发readyread()信号,需要在自
2021-03-03 14:36:58
409
1
原创 I.MX6ULL开发板基于阿里云项目实战 6:遇到的问题,解决方法及项目总结
总体里说,阿里云IOT-SDK的编译,遇到的问题还是很少的。只要保证所使用的编译器和编译内核按照官网提供的例程,可以正确编译。我遇到的问题,是在修改源码的过程中。问题1:服务器推送的数据成功解析(控灯指令),但是灯没有反应。见下图:原因分析:我们是使用write()函数对led设备节点将进行操作的。既然能够解析,就说明数据的推送没有问题,问题应该出来write()函数。分析write()函数:函数原型:ssize_t write(int fd, const void *buf, size_t c
2021-03-01 20:13:59
877
原创 I.MX6ULL开发板基于阿里云项目实战 5:修改阿里云IOT-SDK源码,实现将板载AP3216C三合一环境光传感器数据上报至服务器
修改后的全部代码:https://blog.csdn.net/cainiaofu/article/details/114262377?spm=1001.2014.3001.55011、编写AP3216C三合一环境光传感器驱动,生成设备节点我的设备节点是:/dev/AP3216C2、源码的修改注:源码位于src/mqtt/example/mqtt_example.c,在此基础上进行修改。int example_publish(void *handle){ int res = 0;
2021-03-01 17:30:03
275
原创 I.MX6ULL开发板基于阿里云项目实战 4:修改阿里云IOT-SDK源码,实现通过阿里云物联网平台控制LED亮灭
修改后的全部代码:https://blog.csdn.net/cainiaofu/article/details/114262377?spm=1001.2014.3001.55011、首先,编写LED驱动,生成设备节点我的led设备系节点是:/dev/dtsled2、修改源码注:源码位于src/mqtt/example/mqtt_example.c,在此基础上进行修改。//云端下发数据函数 void example_message_arrive(void *pcontext, void *p
2021-03-01 17:21:36
499
原创 阿里云IOT-SDK源码修改:可用于arm开发板,实现和阿里云相互发布和订阅的代码分析
#include "dev_sign_api.h"#include "mqtt_api.h"#include <string.h>#include <stdio.h>#include <stdlib.h>#include <cJSON.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> char DEMO_PRODUCT_KEY[
2021-03-01 14:38:43
700
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人