基于树莓派+STM32+OneNET云平台打造智能家居系统(四)OneNET云平台篇

4.1设备的注册

  在进行OneNET平台开发者账号注册之后,进入开发者中心,进行项目应用以及设备的新建、添加数据流等操作。
这里写图片描述

4.2应用的编辑

  使用OneNET云平台所配备的应用编辑器功能,可以自定义的生成开发者所需要的应用。
这里写图片描述

4.3触发器的使用

  触发器功能同时也是该平台所赋予的功能,实现当数据超过阈值时,发出邮件提醒用户。
这里写图片描述

4.4 与OneNET云平台交互控制程序(部分)

//==========================================================
//	函数名称:	ESP8266_GetIPD
//
//	函数功能:	获取平台返回的数据
//
//	入口参数:	等待的时间(乘以10ms)
//
//	返回参数:	平台返回的原始数据
//
//	说明:		不同网络设备返回的格式不同,需要去调试
//				如ESP8266的返回格式为	"+IPD,x:yyy"	x代表数据长度,yyy是数据内容
//==========================================================
unsigned char *ESP8266_GetIPD(unsigned short timeOut)
{
	char *ptrIPD = NULL;
	do
	{
		if(ESP8266_WaitRecive() == REV_OK)								//如果接收完成
		{
			ptrIPD = strstr((char *)esp8266_buf, "IPD,");				//搜索“IPD”头
			if(ptrIPD == NULL)											//如果没找到,可能是IPD头的延迟,还是需要等待一会,但不会超过设定的时间
			{
				//UsartPrintf(USART_DEBUG, "\"IPD\" not found\r\n");
			}
			else
			{
				ptrIPD = strchr(ptrIPD, ':');							//找到':'
				if(ptrIPD != NULL)
				{
					ptrIPD++;
					return (unsigned char *)(ptrIPD);
				}
				else
					return NULL;	
			}
		}
		DelayXms(5);													//延时等待
	} while(timeOut--);
	return NULL;														//超时还未找到,返回空指针
}
//==========================================================
//	函数名称:	OneNet_RevPro
//
//	函数功能:	平台返回数据检测
//
//	入口参数:	dataPtr:平台返回的数据
//
//	返回参数:	无
//
//	说明:		
//==========================================================
void OneNet_RevPro(unsigned char *cmd)
{
	EDP_PACKET_STRUCTURE edpPacket = {NULL, 0, 0, 0};	//协议包
	char *cmdid_devid = NULL;
	unsigned short cmdid_len = 0;
	char *req = NULL;
	unsigned int req_len = 0;
	unsigned char type = 0;
	short result = 0;
	char *dataPtr = NULL;
	char numBuf[10];
	int num = 0;
	type = EDP_UnPacketRecv(cmd);
	switch(type)							//判断是pushdata还是命令下发
	{
		case CMDREQ:									//解命令包
	    result = EDP_UnPacketCmd(cmd, &cmdid_devid, &cmdid_len, &req, &req_len);
			if(result == 0)					//解包成功,则进行命令回复的组包
			{
				EDP_PacketCmdResp(cmdid_devid, cmdid_len, req, req_len, &edpPacket);
				UsartPrintf(USART_DEBUG, "cmdid: %s, req: %s, req_len: %d\r\n", cmdid_devid, req, req_len);
			}
			
		break;	
		case SAVEACK:
		if(cmd[3] == MSG_ID_HIGH && cmd[4] == MSG_ID_LOW)
		{
UsartPrintf(USART_DEBUG, "Tips:	Send %s\r\n", cmd[5] ? "Err" : "Ok");
		}
			else
	UsartPrintf(USART_DEBUG, "Tips:	Message ID Err\r\n");
	break;
			
    default:
		result = -1;
		break;
	}
	
	ESP8266_Clear();									//清空缓存
	if(result == -1)
		return;
	dataPtr = strchr(req, ':');							//搜索':'
	if(dataPtr != NULL)									//如果找到了
	{
	dataPtr++;
	while(*dataPtr >= '0' && *dataPtr <= '9')//判断是否是下发的命令控制数据
		{
			numBuf[num++] = *dataPtr++;
		}
		num = atoi((const char *)numBuf);				//转为数值形式
		if(strstr((char *)req, "button"))				//搜索"button"
		{
			if(num == 1)						//控制数据如果为1,代表开
			{
				relay_on();
			}
			else if(num == 0)					//控制数据如果为0,代表关
			{
				relay_off();
			}
		}

	}
	
	if(type == CMDREQ && result == 0)			//如果是命令包 且 解包成功
	{
		EDP_FreeBuffer(cmdid_devid);						//释放内存
		EDP_FreeBuffer(req);
															//回复命令
		ESP8266_SendData(edpPacket._data, edpPacket._len);	//上传平台
		EDP_DeleteBuffer(&edpPacket);						//删包
	}

}

  在此感谢OneNET云平台所给与的强大的开发平台。

2020-10-18更新
PS:源码已share在github。

https://github.com/tancolin/SmartHome_proto.git
  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
基于树莓派STM32智能家居系统,需要一个清晰的系统架构和细致的软件设计。首先,我们需要将树莓派STM32以及Onenet云平台进行嵌入式开发,以实现智能家居系统的各种功能。 系统架构中,树莓派被设计为主控设备,负责与云平台进行通信和控制。而STM32作为从设备,主要处理各种传感器和执行器的数据采集和控制功能。这样的架构可以有效分担树莓派的计算负担,并提高系统的稳定性和响应速度。 在软件设计方面,我们可以采用分层的设计思路。首先是应用层,这个层次负责用户交互和控制。通过设计友好的用户界面和优雅的交互方式,使用户能够方便地使用系统各项功能。 其次是通信层,这个层次负责树莓派云平台之间的通信。我们可以使用MQTT协议,通过WiFi或以太网连接树莓派云平台,实现数据的传送和云端控制。 再次是逻辑层,这个层次负责处理来自传感器和执行器的数据,并自动化执行一些任务。通过编写适当的逻辑算法和规则,使系统能够智能地感知和响应环境变化,例如自动调节温度、照明和安防等。 最后是驱动层,这个层次负责与STM32进行通信和控制。我们可以编写相应的驱动程序,与STM32的GPIO口进行通信,实现对传感器和执行器的控制。 整个系统的设计需要考虑可扩展性和易于维护性。我们可以使用面向对象的编程方法,将各个功能模块进行封装,使其能够独立工作和灵活组装。同时,我们还需要进行充分的测试和调试,以确保系统的稳定性和可靠性。 总之,基于树莓派STM32智能家居系统设计,需要一个清晰的架构和合理的软件设计。通过分层设计和模块化开发,我们可以实现一个功能强大、稳定可靠的智能家居系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@菠萝菠萝哒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值