项目(智慧教室)第五部分,Zigbee采集控制功能实现

news2024/11/30 10:32:58

一。IAR工程针对Zigbee的修改

补充:硬件配置

(1)拨码开关拨到公口处,协调器的连接

(2)协调器的烧写(Zigbee协调器也需要烧写)

(4)温湿度模块的烧写

1.寻找Zigbee项目文件。

2.使用IAR,Zigbee协调器的选择,Zigbee协调器代码烧写

注意:协调器与节点的代码在一个工程文件下,所以会有协调器选择或温湿度节点的选择。

编译前选择coordinatorEB不要选错

编译下载

3.编译前选择风扇与温度

(1)宏定义选择--》温湿度选择#define TMEP_NODE

风扇选择--》FAN_NODE

二。keil工程的修改

1.向keil工程中移植protocol.c protocol.h

(1)protocol.c

(2)protocol.h。这是zigbee的移植文件

2.对ZIgbee串口数据的接受

2.1usart.c
    //主要配置使能uart1空闲中断-->串口中断的使能
    

  __HAL_UART_ENABLE_IT(uartHandle,UART_IT_RXNE);

2.2freertos.c
    //在zigbee任务中进行接收消息,解析消息

(1)头文件的加入

#include "string.h"
#include "protocol.h"

(2)创建Zigbee消息队列

uint8_t ZigbeeBuff[40];
osMessageQId ZigbeeQueueHandle;

(3)Zigbee消息队列的初始化

  osMessageQDef(ZigbeeQueue, 40, uint8_t);
  ZigbeeQueueHandle = osMessageCreate(osMessageQ(ZigbeeQueue), NULL);  

(4)Zigbee消息接收

void Zigbee_Task(void const * argument)
{
  /* USER CODE BEGIN Zigbee_Task */
	uint8_t u8Index;
  /* Infinite loop */
  for(;;)
  {
	  //每次读取消息之前,把索引初始化为0
	  u8Index = 0;
	  //1、一直等待接收消息,第一个消息应该放在消息缓冲区的第一个元素上
		if(xQueueReceive(ZigbeeQueueHandle,&ZigbeeBuff[u8Index++],portMAX_DELAY)==pdPASS){
			while(xQueueReceive(ZigbeeQueueHandle,&ZigbeeBuff[u8Index++],50)){}
			//完成解析以后,要清空接收缓冲区,不然会出现问题
			  ProtocolParse(ZigbeeBuff,u8Index-1);
		    memset(ZigbeeBuff,0,40);						
		}
  }
  /* USER CODE END Zigbee_Task */
}

2.3stm32f4xx_it.c
    //zigbee消息入队

(1)添加头文件

#include "cmsis_os.h"

(2)声明外部Zigbee

extern osMessageQId ZigbeeQueueHandle;
extern UART_HandleTypeDef huart3;

(3)串口中断接受数据

	uint8_t u8Data;
	if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE) == SET){
		u8Data = huart1.Instance->DR;
		xQueueSendFromISR(ZigbeeQueueHandle,&u8Data,NULL);
	}	

3.数据封装CmdAndSensor.c

(1)加入头文件,控制zigbee节点(风扇

#include "protocol.h"

FanControl((uint8_t)(Cmd));

4.httpserver-socket.c通信实现

(1)加入外部数据,修改

extern int SensorValue[3];

(2)得到数据字符串

static void Get_SensorValue(void *buffer, void *value)
{
	
	sprintf(buffer, "{\"temperature\":\"%d\",\"humidity\":\"%d\",\"light\":\"10021.1\"}", SensorValue[0], SensorValue[1]);
}

(2)对风扇的控制

<1>加入头文件

#include "protocol.h"

<2>实现对风扇的控制

static void Post_Cmd_Fan(void *buffer, void *value)
{
	if (strstr(value, On))
	{
		sprintf(buffer, "{\"Status\":\"On\"}");
		FanControl(0x01);
	}
	else if (strstr(value, Off))
	{
		sprintf(buffer, "{\"Status\":\"Off\"}");
		FanControl(0x0);
	}
	else
	{
		sprintf(buffer, "{\"Status\":\"Error\"}");
	}
}

5.对TempDLG.c修改

(1)修改外部数据(就是展示温湿度的数据

extern int SensorValue[3];

(2)定义一个字符串

	char       SensorBuff[10];

(3)页面展示数据

	sprintf(SensorBuff,"%d",SensorValue[0]);
    TEXT_SetText(hItem, SensorBuff);

6.LightDLG.c修改 (与上面一样)

(1)外部数据声明(收到的温湿度),声明字符串(数据改为字符串,这样才可以展示)

extern int SensorValue[3];
char SensorBuff[10];

(2)展示出来

	sprintf(SensorBuff,"%d",SensorValue[2]);
    TEXT_SetText(hItem, SensorBuff);

7.HumDLG.c(同上)

(1)使用外部声明数据,声明字符串

extern int SensorValue[3];

char SensorBuff[10];

(2)数据展示( 通过数据)

	sprintf(SensorBuff,"%d",SensorValue[1]);
    TEXT_SetText(hItem, SensorBuff);

8.FanDLG.c(风扇不需要加入数据)

#include "CmdAndSensor.h"

vFanCmd(status);  

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工具 | XShell的学习与使用

工具 | XShell的学习与使用 时间&#xff1a;2023年9月8日09:03:29 文章目录 工具 | XShell的学习与使用1.下载2.安装 1.下载 1.官网XSHELL - NetSarang Website 2.免费版下载&#xff1a;家庭/学校免费 - NetSarang Website (xshell.com) 3.https://cdn.netsarang.net/de06d10…

LabVIEW检测润滑油中的水分和铁颗粒

LabVIEW检测润滑油中的水分和铁颗粒 润滑油广泛应用于现代机械设备&#xff0c;由于工作环境日益恶劣&#xff0c;润滑油经常被水分乳化&#xff0c;加速对机械设备的腐蚀。此外&#xff0c;润滑油还受到机械零件摩擦中产生的Fe颗粒的污染&#xff0c;削弱了其机械润滑效果。润…

mobaXterm使用pycharm

首先去pycharm的官网PyCharm: the Python IDE for Professional Developers by JetBrains 下载pycharm&#xff08;选择linux的community版本即可&#xff09; 下载后的压缩包拖拽到mobaXterm如下位置&#xff1a; 进入压缩包所在的文件夹&#xff08;图中这个位置是root目录&…

docker镜像 容器 仓库

docker镜像 Docker 运行容器前需要本地存在对应的镜像&#xff0c;如果本地不存在该镜像&#xff0c;Docker会从镜像仓库下载该镜像。 获取镜像 Docker Hub 上有大量的高质量的镜像可以用&#xff0c;这里我们就说一下怎么获取这些镜像。 从 Docker 镜像仓库获取镜像的命令…

中科驭数KPU FLEXFLOW®-2100R RDMA加速DPU卡正式发布,下一代数据中心互联的“超级高速公路”

2023服贸会期间&#xff0c;中科驭数重磅推出最新自研的高性能网络“利器”——KPU FLEXFLOW-2100R RDMA加速DPU卡。这款产品的发布标志着中科驭数在高性能计算和数据中心领域的不断创新&#xff0c;旨在面向高速网络、高性能存储搭建起算力集群内部通信的"超级高速公路”…

【前端】在Vue页面中引入其它vue页面 数据传输 相互调用方法等

主页面 home 从页面 headView 需求 在 home.vue 中引用 headView.Vue 方案: home.vue 代码: 只需要在home.vue 想要的地方添加 <headView></headView> <script>//聊天页面 import headView /view/headView.vueexport default {components: {headView},…

978. 最长湍流子数组

978. 最长湍流子数组 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff08;一&#xff09;&#xff1a;滑动窗口参考代码&#xff1a; 解题思路&#xff08;二&#xff09;&#xff1a;动态递归参考代码&#xff1a; 针对&#xff08;二&#xff09;进行优化&#x…

组件安全以及漏洞复现

组件安全 1. 概述 A9:2017-使⽤含有已知漏洞的组件 A06:2021-Vulnerable and Outdated Components ​ 组件&#xff08;例如&#xff1a;库、框架和其他软件模块&#xff09;拥有和应用程序相同的权限。如果应用程序中含有已知漏洞的组件被攻击者利用&#xff0c;可能会造成…

【2023年11月第四版教材】第11章《成本管理》(第2部分)

第11章《成本管理》&#xff08;第2部分&#xff09; 4 规划成本管理4.1 成本管理计划★★★ 5 估算成本5.1 估算成本★★★ &#xff08;19上57&#xff09; &#xff08;19下35&#xff09;5.2 数据分析★★★5.4 成本估算★★★ 6 制定预算6.1 成本基准★★★ 7 控制成本7.1…

FOXBORO FBM233 P0926GX电源模块产品特点

FOXBORO FBM233 P0926GX 是一款电源模块&#xff0c;通常用于供电和管理工业自动化和控制系统中的设备和模块。以下是可能与这款电源模块相关的一些产品特点和功能&#xff1a; 电源输出&#xff1a; FBM233 P0926GX 电源模块提供一个或多个电源输出通道&#xff0c;用于为其他…

命悬一线小游戏

欢迎来到程序小院 命悬一线 玩法&#xff1a; 点击鼠标人物摆动跳跃&#xff0c;松开鼠标跳到方格上面&#xff0c;每跳一次都会有对应的分数统计&#xff0c;不要让人物掉下哦^^。开始游戏 html <canvas id"jsGameScreen"></canvas>css .bandiv{floa…

redis八股1

参考Redis连环60问&#xff08;八股文背诵版&#xff09; - 知乎 (zhihu.com) 1.是什么 本质上是一个key-val数据库,把整个数据库加载到内存中操作&#xff0c;定期通过异步操作把数据flush到硬盘持久化。因为纯内存操作&#xff0c;所以性能很出色&#xff0c;每秒可以超过10…

java开发之个人微信的二次开发

简要描述&#xff1a; 修改我在某群的昵称 请求URL&#xff1a; http://域名/updateIInChatRoomNickName 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参…

常见锁策略

一、乐观锁和悲观锁&#xff1a; &#xff08;一&#xff09;乐观锁 和 悲观锁概念 悲观锁&#xff1a;总是假设最坏的情况&#xff0c;认为每次读写数据都会冲突&#xff0c;所以每次在读写数据的时候都会上锁&#xff0c;保证同一时间段只有一个线程在读写数据。 乐观锁&a…

从 算力云 零开始部署ChatGLM2-6B 教程

硬件最低需求&#xff0c;显存13G以上 基本环境&#xff1a; 1.autodl-tmp 目录下 git clone https://github.com/THUDM/ChatGLM2-6B.git然后使用 pip 安装依赖&#xff1a; pip install -r requirements.txtpip 使用pip 阿里的 再执行git clone之前&#xff0c;要先在命令行…

[GKCTF 2021]Crash

目录 恢复符号表&#xff0c;找到main函数 四部分加密 第一部分 第二部分 第三部分 第四段 恢复符号表&#xff0c;找到main函数 观察特征&#xff0c;应该是Go语言&#xff0c;函数没有名字&#xff0c;用脚本恢复符号表&#xff08;脚本自己去找一个&#xff09; 四部…

MySQL - binlog同步过程

文章目录 binlog作用binlog同步过程主从同步架构图&#xff08;异步同步&#xff09; binlog作用 MySQL 的 binlog(二进制日志) 是一种记录数据库所有数据更改操作的日志&#xff0c;可以用于数据库备份、恢复、错误排查、数据同步等操作。binlog 是 MySQL 中的一个重要组件&a…

操作系统 --- 计算机系统引论

&#xff08;一&#xff09;操作系统的目的和作用 概念&#xff08;定义&#xff09; 操作系统 &#xff08; Operating System &#xff0c; OS &#xff09;是指控制和 管理 整个计算机系统的 硬件和软件 资源&#xff0c;并合理地组织调度计算机的工作和资源的分配&#…

基于SSM的网络游戏公司官方平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Swift学习笔记一(数组篇)

目录 0 绪论 1 数组的创建和初始化 2.数组遍历 2.1通过键值对遍历 2.2 通过forEach遍历 2.3 通过for in遍历 2.3.1 for in 搭配 enumerated 2.3.2 for in的另一种形式 2.3.2 for in 搭配 indices 2.4 通过Iterator遍历器遍历 3 数组的操作 3.1 contains 判断数组包含…