智能家居2 -- 实现网络控制模块

基于Zigbee和MQTT的智能家居应用 本文提出了基于Zigbee和MQTT的一种智能家居设计方案,与小米华为等做成品的方案不同,本文方案主要设计的是不同的设备控制器,对于用户定制的自由度大,主要涉及了两种协议的优势和协议对接思想、智能家居应用内容和前景,以及本方案存在的不足和解决方案等内容。 关键词:Zigbee;MQTT;智能家居;JSON; 阅读详情

这一模块的思路和前面的语言控制模块很相似,差别只是调用TCP 去控制

废话少说,放码过来

增添/修改代码

socket_interface.c


#if 0
struct control
{
char control_name[128]; //监听模块名称
int (*init)(void); //初始化函数
void (*final)(void);//结束释放函数
void *(*get)(void *arg);//监听函数,如语音监听
void *(*set)(void *arg); //设置函数,如语音播报
struct control *next;
};
#endif

#include <pthread.h>
#include <stdio.h>
#include "voice_interface.h"
#include "mq_queue.h"
#include "uartTool.h"
#include "global.h"


static int serial_fd = -1; // static 这个 变量只在当前文件有效

static int voice_init(void )
{
  serial_fd = myserialOpen(SERIAL_DEV,BAUD); // 初始化并且打开串口
  printf("%s|%s|%d   serial_fd = %d\n",__FILE__,__func__,__LINE__,serial_fd);

  return serial_fd;
}

static void voice_final(void)
{
  if(-1 != serial_fd) // 打开串口成功
  {
    close(serial_fd); // 关闭我们打开的串口
    serial_fd = -1; // 复位
  }
}
// 接收语言指令
static void* voice_get(void *arg)// mqd 通过arg 传参获得
{
    int len = 0;
    mqd_t mqd = -1;
    ctrl_info_t * ctrl_info = NULL; 
    if(NULL != arg)
        ctrl_info = (ctrl_info_t*)arg;

    unsigned char buffer[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // 初始化 buffer
    if (-1 == serial_fd)
    {
        //打开串口
        serial_fd = voice_init();// 尝试打开串口
        if (-1 == serial_fd){ //还是打开失败
        printf("%s | %s | %d:open serial failed\n", __FILE__, __func__, __LINE__); // 三个宏的含义: 文件名 - main.c,函数名 - pget_voice ,行号 -  138
        pthread_exit(0);   
        }                                                        // 串口打开失败 -->退出
    }
 
     
    mqd = ctrl_info->mqd; 
    

    if((mqd_t)-1 == mqd)
    {
       pthread_exit(0);  
    }

    pthread_detach(pthread_self());// 与父线程分离
    printf("%s thread start\n",__func__);

    while (1)
    {
        len = serialGetstring(serial_fd, buffer); // 通过串口获得语言输入
        printf("%s|%s|%d,  0x%x,0x%x,0x%x,0x%x,0x%x,0x%x\n",__FILE__,__func__,__LINE__,buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5]);
        printf("%s|%s|%d:len = %d\n",__FILE__,__func__,__LINE__,len);
        if (len > 0)         // 判断是否 接到识别指令
        {
          if(buffer[0] == 0xAA && buffer[1] == 0x55 
            &&buffer[4]==0x55 && buffer[5]==0xAA)
            {
               printf("%s|%s|%d, send: 0x%x,0x%x,0x%x,0x%x,0x%x,0x%x\n",__FILE__,__func__,__LINE__,buffer[0],buffer[1],buffer[2],buffer[3],buffer[4],buffer[5]);
        
              send_msg(mqd,buffer,len); // 注意获取len长度不能使用strlen() --> 0x00 会识别为截止位-->只能读取到三个字节(但不是我们实际的截止位(0x55 0xAA ))
            }
            memset(buffer,0,sizeof(buffer)); // 复位buffer
        }
    }

    pthread_exit(0);

}

static void* voice_set(void *arg)
{

}

struct  control voice_control ={
    .control_name = "voice",
    .init = voice_init,
    .final = voice_final,
    .get = voice_get,
    .set = voice_set,
    .next = NULL
};


struct control *add_voice_to_ctrl_list(struct control *phead)
{
  //头插法实现 添加链表节点
  struct control *pnew = NULL;
 
  
  if(NULL == phead)
  {
    phead = &voice_control; // 直接传入我们的 voice_control
  }

  else// 头结点非空 - 链表有数据
  {
   voice_control.next = phead; //把新的节点的next指向头结点
   phead = &voice_control; // 让心节点成为头结点
  }

  return phead;

};



socket_interface.h

#ifndef ___SOCKET_INTERFACE_H___
#define ___SOCKET_INTERFACE_H___

#include "control.h"
struct control *add_tcpsocket_to_ctrl_list(struct control *phead);



#endif

修改的main.c

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

#include "control.h"
#include "mq_queue.h"
#include "voice_interface.h"
#include "socket_interface.h"
#include "global.h"

// msg_queue_create



int main() {
    pthread_t thread_id;
    struct control *control_phead = NULL;
    struct control *pointer = NULL;
    ctrl_info_t *ctrl_info = NULL;
    ctrl_info = (ctrl_info_t *)malloc(sizeof(ctrl_info_t));
    ctrl_info->ctrl_phead = NULL;
    ctrl_info->mqd = -1;

    int node_num = 0; // 统计节点数

    // 创建消息队列
    ctrl_info->mqd = msg_queue_create();
    if(-1 == ctrl_info->mqd)// 创建消息队列失败
    {
        printf("%s|%s|%d, mqd= %d\n",__FILE__,__func__,__LINE__,ctrl_info->mqd);
        return -1;
    }
    
    ctrl_info->ctrl_phead = add_voice_to_ctrl_list(ctrl_info->ctrl_phead);
    ctrl_info->ctrl_phead = add_tcpsocket_to_ctrl_list(ctrl_info->ctrl_phead);
    //ctrl_info->ctrl_phead = add_fire_to_ctrl_list(ctrl_info->ctrl_phead);
  

    pointer = ctrl_info->ctrl_phead;

    while(NULL!=pointer) // 对所有控制结构体初始化,并且统计节点数
    {
        if(NULL != pointer->init)
        {
             printf("%s|%s|%d   control_name = %s\n",__FILE__,__func__,__LINE__,pointer->control_name);
             pointer->init();
        }
        pointer = pointer->next;
        node_num++; // 统计节点数
    }

    // 根据节点的总数 --> 创建对应数目的线程
    pthread_t *tid = (pthread_t *)malloc(sizeof(int) *node_num);
    pointer = ctrl_info->ctrl_phead;

    for(int i=0;i<node_num;++i)//遍历所有节点
    {
       if(NULL != pointer->get){
          printf("%s|%s|%d   control_name = %s\n",__FILE__,__func__,__LINE__,pointer->control_name);
          pthread_create(&tid[i],NULL,(void *)pointer->get,(void *)ctrl_info); // 传入这个结构体参数,方便同时调用多组线程里面的API
       }
        pointer = pointer->next;
    }
    
     for(int i=0;i<node_num;++i)
     {
     pthread_join(tid[i],NULL);
     }

     for(int i=0;i<node_num;++i)
     {
      if(NULL != pointer->final)
          pointer->final(); // 接打开的使用接口关闭
      pointer = pointer->next;
     }

     msq_queue_final(ctrl_info->mqd);

}

编译执行:

编译:

make

发送到arm-64平台

scp ./obj/smarthome  orangepi@192.168.1.11:/home/orangepi

执行:

sudo -E ./smarthome

/遇到如下报错 -- 解决:


scp: /home/orangepi/smarthome: Text file busy

kill -9 进程即可

 kill之后成功了

bind: Address already in use
 

要解决这个问题,您可以尝试以下步骤:

  1. 查找并关闭现有进程:使用 netstat、lsof 或 ss 命令来查找正在监听该端口的进程,并关闭它。

    
    
    sudo netstat -tulnp | grep [端口号] 
    # 或者 
    sudo lsof -i :[端口号] 
    # 或者 
    sudo ss -tulnp | grep [端口号]
     

    找到进程ID(PID)后,使用 kill -9 命令来结束该进程。

  2. 重启计算机:如果无法确定哪个进程正在使用端口,或者无法结束该进程,您可以考虑重启计算机。

  3. 使用不同的端口:如果您只是想要快速测试您的应用程序,并且不关心特定的端口号,您可以尝试使用另一个端口。

TCP验证:

(注意发送格式 16进制)

否则你发送的数据很可能变成这样

从零自制基于ESP32-C3的智能家居Wi-Fi控制模块 智能家居的核心在于设备间的可靠通信与灵活控制,而Wi-Fi模块凭借无需额外网关、直接接入家庭路由器的优势,成为许多DIY项目的首选。在众多方案中,ESP32-C3凭借其RISC-V架构、低功耗和内置Wi-Fi/蓝牙能力,成为搭建自定义控制模块的理想主控。结合MQTT这一轻量级开放协议,设备能够实现本地优先的控制逻辑,即使断网也能正常工作,同时可无缝接入Home Assistant等开源平台。本文从需求拆解、硬件选型、电源设计、继电器驱动,到固件开发、MQTT通信、OTA升级及家庭网络部署,完整记录了一套基于 阅读详情

相关推荐

基于单片机的智能家居远程控制系统

单片机是当前常用的一种控制系统,随着人们生活走向智能化,单片机逐渐被应用于智能家居之中。本文是基于单片机设计的一种智能家居远程控制系统,并将无线数据传输以及计算机网络等当前较为先进的技术纳入其中,可实现数据自动采集以及自动调控。除此之外,该技术还可将各类家用电器之间相互关联,且系统中包含诸多控制模块,可实现远程控制,从而满足人们生活的现代化、智能化和自动化。本文将对智能家居远程控制系统进行总体设计、硬件设计以及软件设计,从而满足人们的实际需求。

weixin_45905610的博客 1692

在代码段中安排自己定义的数据

1、编程计算下面八个字型数据之和,将结果存放在ax寄存器中 1,2,3,4,5,6,7,8 通过前面的学习:将这一段数据安排在一段连续的内存中——>通过Loop指令,用add ax, ds:[bx]     add bx,2 ——>设置内存地址,把ds:[bx]指向“1”的位置 以前是通过e指令去修改一段内存(不安全)——》如何让系统分配给我们内存?(加载的过程其实就是系统分配给程序内存的过程)——》只要把数据写在源文件就行了 程序取得所需空间的方法有两种:一是在加载程

_Co1a 551

基于树莓派4B设计的智能家居系统(华为云IOT)

本次设计主要以树莓派为主要的硬件开发平台,以Raspbian操作系统为软件开发平台。主板树莓派通过HTTP协议和MQTT协议分别与上位机和下位机通信,搭建的服务器用来储存数据和日志记录。搭配有线和无线组合通信方式设计出一套完整的智能家居系统。

2万+

Windows网络通信

包含头文件 网络编程在Windows平台上有俩个主要版本:Winsock1和Winsock2 #include <WinSock.h> #pragma comment(lib, "WSock32.Lib") #include <WinSock2.h> #pragma comment(lib, "ws2_32.lib") //获取处理计算机硬件设备信息 #include...

C++初学者 897

OpenWRT平台PHP网页状态监控控件实现

OpenWRT是一个针对嵌入式设备的开源固件项目,它以Linux为核心,通过提供一套完整的工具链、库以及标准的API,为开发者和用户提供了一个高度可定制的平台。其最大的特点是拥有一个包管理器,使得安装、更新和管理软件包变得轻而易举,大大提升了路由器的功能和扩展性。opnwrt_webstatus通过集成多种功能模块,为用户提供了一站式的网络状态监控和系统资源查看服务。其主要功能模块包括:网络状态监控:实时追踪并展示网络连接状态、流量使用情况。

weixin_42589700的博客 1412

STM32智能家居系统教程

本教程详细介绍了如何在STM32嵌入式系统中实现智能家居系统,从硬件选择、软件实现到系统配置和应用场景都进行了全面的阐述。通过合理的技术选择和系统设计,可以构建一个高效且功能强大的智能家居系统。

stm32d1219的博客 3145

Android编程实用代码合集

1.android dp和px之间转换 public class DensityUtil { /** * 根据手机的分辨率从 dip 的单位 转成为 px(像素) */ public static int dip2px(Context context, float dpValue) { ...

weixin_34159110的博客 231

海康威视摄像头CVE-2017-7921漏洞复现:从零到一的实战指南(含解密工具下载)

本文详细解析了海康威视摄像头CVE-2017-7921漏洞的技术原理与复现方法,提供从环境搭建到实战利用的完整指南。通过认证绕过漏洞,攻击者可获取敏感信息并执行高权限操作,文章还包含解密工具下载与防御建议,助力安全研究人员深入理解物联网设备安全风险。

weixin_29325515的博客 813

网络编程技术-----windows网络编程

网络编程技术 c/s简易模型–windows编程c++(未使用select) ###1:sever服务器端分为以下7个步骤 打开网络库 校验版本 创建SOKCKET 绑定地质与端口 开始监听 接受客户端链接(创建客户端socket) 与客户端发送信息 1.0头文件 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <string.h> #include <Ws2tcpip.h>//调用inet_pto

weixin_46305333的博客 2445

SAP中贸易伙伴的应用原理简析

公司也称为贸易伙伴,是出具合并报表的组织单位,可以为客户和供应商分配公司(贸易伙伴),用于识别集团内关闻公司间的业务往来,在编制合并报表时进行往来账务的计算处理。 如下图某贸易伙伴公司(关联方名称G0059)在我方公司的SAP系统中有多重身份(即是供应商,又是客户)。那么在我方公司SAP系统中建立起公司(贸易伙伴),并关联到供应商和客户主数据中。之后,就可以通过G0059这个贸易伙伴名称来识别与该贸易伙伴间的往来业务。 相应的配置设定如下: 定义公司(贸易伙伴或关联方) 会计凭证中会

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 9816

从零开始:Ubuntu 24.04 LTS + Win11双系统安装教程

本文将简单直白介绍如何从零开始在同一台电脑上安装 Ubuntu 24.04 LTS 和 Windows 11,你可以在需要进行专业开发或运维工作时,轻松切换到 Ubuntu,享受其带来的高效与自由;而在日常学习生活和娱乐休闲时,依然可以无缝使用熟悉的 Windows 环境。

萑澈的博客 8116

1DO+1DI网络控制模块:远程控制功能解析与应用

1DO+1DI网络控制模块作为工业自动化和智能系统的关键组件,通过一个数字量输入(DI)通道和一个数字量输出(DO)通道实现设备间的精准信号采集与控制。该模块采用光耦隔离技术,支持干接点信号采集和继电器输出,具备以太网通信能力,响应时间≤100ms,工作温度范围-40℃~85℃。在工业自动化、智能楼宇、能源管理和智能家居等领域广泛应用,如生产线设备控制、安防系统联动、电力设备远程运维等,为数字化转型提供可靠支持。

u012984333的博客 697

TJA1445/TJA1465 CAN收发器硬件设计与软件配置实战指南

控制器局域网(CAN)总线是汽车电子和工业控制领域实现电子控制单元(ECU)间可靠通信的核心技术。其工作原理是将数字信号转换为差分信号进行抗干扰传输,技术价值在于构建稳定、高效的分布式实时控制系统。随着汽车电子架构向域集中式演进,对CAN总线的通信速率、网络复杂度和静态功耗提出了更高要求,这催生了支持CAN FD协议和智能电源管理的新一代高速CAN收发器。在车载网关、域控制器及工业网络节点等应用场景中,NXP的TJA1445和TJA1465系列收发器凭借其部分组网(Partial Networking)和选

weixin_29655587的博客 409

基于PSoC 4与ESP8266的多协议智能家居控制模块设计与实现

物联网(IoT)的核心在于实现物理设备与数字世界的互联互通,其基础架构通常遵循感知、决策与执行的逻辑分层。在嵌入式系统设计中,微控制器(MCU)负责本地实时控制与信号采集,而无线通信模块则担当网络接入与数据上云的角色。这种分工协作模式能有效平衡实时性、可靠性与连接性需求,具有重要的技术价值。在智能家居等应用场景中,用户往往需要融合本地触摸、红外遥控与云端语音等多种交互方式,这就要求核心控制模块具备多协议接入与处理能力。本文聚焦的智能家居控制模块项目,正是这一设计思想的典型实践。它巧妙地利用**Infineo

weixin_30905981的博客 297

PFC胶结模型实战:从线性到平行粘结的力学行为解析

本文深入解析了PFC中线性接触与平行粘结(pb模型)的核心差异与应用。平行粘结模型通过模拟胶结层的力学行为,能够有效传递拉力和抵抗弯矩,是模拟岩石、混凝土等胶结材料的关键。文章详细介绍了其变形与强度参数的设置、法向与切向行为的验证方法,并揭示了全量与增量力计算中易出现的“幽灵力”问题及其解决方案,为复杂模型的构建与调试提供了实用策略。

weixin_29230773的博客 1208

肖特基二极管的反向恢复过程

本博客简述肖特基二极管反向恢复过程。

记得诚 1万+

基于STM32的智能家居控制器设计与实现

本项目的目标是深入探索音视频编码与解码技术的原理与实践,通过实现一个音视频编码与解码系统,加深对该领域的理解,并掌握相关的软件开发和硬件设计技术。可以使用适当的视频输入设备进行视频数据的采集,并对采集到的视频数据进行预处理,例如图像增强、分辨率调整等。硬件平台的选择将直接影响系统的性能和资源消耗。在实验3中,我们使用了不同的视频编码算法对采集到的视频数据进行编码,并计算了编码后的码流大小和图像质量指标。在实验1中,我们使用了不同的音频编码算法对采集到的音频数据进行编码,并计算了编码后的码流大小和音质指标。

牛肉胡辣汤 6394

使用timeROC包的compare函数比较不同标记物下两个多时间AUC值是否具有统计显著性

时间依赖的接收器操作特征曲线(time-dependent receiver operating characteristic curve, time-dependent ROC curve)是评估和比较标记物在不同时间点上预测能力的重要工具。在R语言中,timeROC包提供了丰富的函数和工具,可用于分析和比较多时间点的AUC值。时间点(timepoints)表示观察的时间点,标记物1(marker1)和标记物2(marker2)分别表示在每个时间点上的预测概率。最后,我们输出比较结果。

2301_79331387的博客 921

计算机控制节点设备原理,节点控制模块

模块(module)系指由复数个具基础功能之组件,组件组成之具特定功能之组件,该组件用以组成具完整功能之系统、设备或程序。节点就是指能上网的设备。节点控制模块(node control module)主要完成总线通信以及对控制模块发出指令的功能。模块的设计采取多种电路集成于一体的设计方案,一个节点控制模块可以控制多种对象。中文名节点控制模块外文名node control module涉及学科信息科...

weixin_39629129的博客 1504

BlockUI专栏目录

BlockUI是一个设计NX对话框的工具,是官方推荐使用的对话框制作方法,能够与NX自身风格相统一,并且在实际开发中经常被使用。BlockUI可以帮助用户快速创建NX对话框,支持多种控件类型,如按钮、文本框、标签等。通过使用BlockUI,用户可以轻松地自定义对话框的布局、样式和交互行为。此外,BlockUI还提供了一些高级功能,如动态更新、条件显示和事件处理等,以帮助用户创建更加复杂和灵活的对话框。本专栏讲述了使用BlockUI制作NX对话框的方法,介绍了每个控件的功能,并且分享一些常用操作的源码。

王牌飞行员_里海的博客 1633

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

智能家居控制器有哪些模块?智能家居设计原则有哪些

智能家居系统设计应遵循实用、可靠、标准化和便捷性原则,其控制器包含四大基础模块:无线收发基站(实现有线无线信号转换)、继电器开关(控制大小功率电器)、可控硅调光(五档灯光调节)和信息开关(实现群控功能)。系统整合灯光、家电、安防等核心功能,提供多种智能控制方式,强调用户友好的交互体验。设计需保证24小时稳定运行,采用标准协议确保兼容性,并注重简化布线与操作维护,为未来功能扩展预留空间。

ic2121的博客 222

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

智能家居系统结构

  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址   http://www.cnblogs.com/Colin-Cai/p/8490423.html   作者:窗户   QQ:6679072   E-mail:6679072@qq.com 0 引 言 智能家居是指利用先进的计算机技术、网络通信技术、综合布线技术,...

weixin_34370347的博客 7517

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

智能家居系统的设计与实现

摘自:http://www.csmayi.cn/yjzc/hyzc/201103/127410.html   论文关键词:智能家居 嵌入式系统 Windows CE Visual C++ Delphi   论文摘要:本文了基于Windows CE.net 5.0嵌入式操作系统,以使用Intel XScale270为CPU的ARM10嵌入式实验箱为硬件基础,以Visual Studio 2

心随梦动 1万+

html控制智能家居,一种通过web控制的智能家居系统的制作方法

一种通过web控制的智能家居系统的制作方法【专利摘要】本发明提供了一种通过web控制的智能家居系统,包括移动终端,以MIPS芯片为核心的WiFi转串口模块,STM32控制模块,DALI控制模块,SI4463无线通信模块以及红外发射电路;移动终端使用浏览器通过WiFi将数据传输至WiFi转串口模块,WiFi转串口模块通过串口将数据传输至STM32控制模块;STM32控制模块进行数据处理并将处理后的数...

weixin_33410492的博客 1105

智能嵌入式MCU控制模块:动态显示与网络连接神器

这款智能嵌入式MCU控制模块是一款集实用性、灵活性和美观性于一体的创新产品。无论是智能家居爱好者、教育机构、工业自动化领域还是电子工程师,都能从中找到适合自己的应用场景。通过科学的设计和贴心的服务,我们将帮助您轻松实现从创意到现实的跨越!

学习一定要有针对性的练习-实操! 585

智能家居设计原理c语言,基于STM32的小型智能家居系统设计

摘 要:随着科学技术的不断发展,智能家居系统作为物联网技术的一项重要应用也随着物联网的快速发展发生了明显的改善。现阶段,智能家居系统的应用还仅仅只是存在于高端群体中,其主要原因还是由于智能家居系统的性价比,为实现智能家居市场的有效扩展,开发和研制出一种针对低端用户及大众化的小型智能家居系统就显得尤为必要。关键词:物联网;智能家居;小型;大众化;STM32中图分类号:TP273 文献标识码:A智能家...

weixin_36158842的博客 5040
上一篇: 工厂模式应用实例
下一篇: 智能家居4 -- 添加接收消息的初步处理
mx_jun
博客等级 码龄5年 1605粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值