,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,物联网仓储系统,项目组员:,董亚军,郝贤森,赵星达,姜兆勇,张超 刘继琛 张立东,汇报人:,董亚军,物联网仓储系统项目组员:,1,项目分工:,主线程:董亚军,郝贤森,系统移植:赵星达,M0,:张立东,姜兆勇,Web,、,CGI,:刘继琛 张超,项目分工:主线程:董亚军郝贤森,2,物联网介绍,物联网是新一代信息技术的重要组成部分。其英文名称是“The Internet of things”。由此,顾名思义,“物联网就是物物相连的互联网”。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。物联网就是“物物相连的互联网”。物联网通过智能感知、识别技术与普适计算、泛在网络的融合应用,被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。物联网是互联网的应用拓展,与其说物联网是网络,不如说物联网是业务和应用。因此,应用创新是物联网发展的核心,以用户体验为核心的创新2.0是物联网发展的灵魂。,物联网介绍物联网是新一代信息技术的重要组成部分。其英文名称是,3,物联网定义,最初在1999年提出:即通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器、气体感应器等信息传感设备,按约定的协议,把任何物品与互联网连接起来,进行信息交换和通讯,以实现智能化识别、定位、跟踪、监控和管理的一种网络。简而言之,物联网就是“物物相连的互联网”。,物联网定义最初在1999年提出:即通过射频识别(RFID)、,4,物联网定义,中国物联网校企联盟将物联网的定义为当下几乎所有技术与计算机、互联网技术的结合,实现物体与物体之间:环境以及状态信息实时的实时共享以及智能化的收集、传递、处理、执行。广义上说,当下涉及到信息技术的应用,都可以纳入物联网的范畴。,物联网定义 中国物联网校企联盟将物联网的定义为当下几乎,5,项目总流程,项目总流程,6,项目简介,通过,web,端远程访问服务器,达到对数据的采集,查看实时的仓库信息。发生异常时进行报警、做出相应的处理。,通过,web,端远程控制,当货物的进出仓库时进行记录。,这个方案主要用到了下面的技术:,项目简介 通过web端远程访问服务器,达到对数,7,物联网仓储系统设计的技术,Linux设备驱动,Zigbee无线技术与RFID技术,传感器技术(温度、光线、湿度、重力感应等),Cortex-M0 ARM 微控制器技术,I2C、SPI、中断、单总线、A/D、PWM、UART等多种接口技术,监控及视频流处理技术,GPRS远程报警技术(未完成),嵌入式Web服务器技术,处理客户请求(,CGI,)技术,数据库技术(,sqlite3,),wifi,技术(,sqlite3,)(未完成),html,页面显示技术,物联网仓储系统设计的技术 Linux设备驱动,8,全局结构体定义,/仓库货物信息,struct storage_goods_info,unsigned char goods_type;/货物类型,用数字表示,unsigned int goods_count;/货物数量,;,全局结构体定义/仓库货物信息,9,全局结构体定义,/某个仓库的全部信息,struct storage_info,unsigned char storage_status;,unsigned char led_status;,unsigned char buzzer_status;,unsigned char fan_status;,unsigned char seg_status;,signed char x;,signed char y;,signed char z;,float temperature;,float temperatureMIN;,全局结构体定义/某个仓库的全部信息,10,全局结构体定义,float temperatureMAX;,float humidity;,float humidityMIN;,float humidityMAX;,float illumination;,float illuminationMIN;,float illuminationMAX;,float battery;,float adc;,struct storage_goods_info goods_infoGOODS_NUM;,;,全局结构体定义float temperatureMAX;,11,全局结构体定义,/所有仓库的信息结构体,struct env_info_clien_addr,struct storage_info storage_noSTORAGE_NUM;,;,/消息队列结构体,struct msg,long type;/从消息队列接收消息时用于判断的消息类型,long msgtype;/具体的消息类型,unsigned char textQUEUE_MSG_LEN;/消息正文,;,全局结构体定义/所有仓库的信息结构体,12,物联网仓储系统ppt课件,13,用到的线程,其中用到的线程如下:,pthread_client_request():处理消息队列里请求的线程.,pthread_refresh():更新共享内存里的实时数据.,pthread_sqlite():数据库线程.,pthread_transfer():接收M0数据线程.,pthread_analysis():M0数据分析线程.,pthread_sms():短信模块控制线程.(未使用),pthread_buzzer():A,9,蜂鸣器控制线程.,pthread_led():A,9,LED模块线程.,pthread_camera():摄像头模块控制线程.,用到的线程其中用到的线程如下:,14,线程和进程的区别:,线程:是一种轻量级进程,线程存在于进程中。,线程和进程一样都会被操作系统调度(时间片),通常线程指的是共享相同地址空间的多个任务。,线程优势:线程运行时,相互切换效率高;线程之间共享数据很方便。,进程拥有独立的运行空间,一个进程崩溃后,在保护模式下并不会影响其他的进程。一个进程中可以包含有多个线程,而一个线程只能包含在进程中。一个线程拥有自己独有的局部变量栈,但是没有独立的空间,一个进程中多个线程共同共享一块资源,因此当一个线程崩溃后此进程也会崩溃。因此多进程要比多线程健壮性要好,但是,多进程效率比较低。当需要并行操作和共享某些变量最好使用多线程的模式。,线程和进程的区别:线程:是一种轻量级进程,线程存在于进程中。,15,线程,创建:创建一个线程,int pthread_create(pthread_t*thread,const pthread_attr_t,*attr,void*(*routine)(void*),void*arg),参数:thread,线程的标识符(类似于进程的pid号),attr,用于指定创建的线程的属性,通常为NULL(不需要设置),routine,函数指针,该函数就是线程主体,arg,就是传递给函数的参数。,返回值:成功返回0,失败返回非负的错误号,线程创建:创建一个线程,16,线程,int pthread_exit(void*value_ptr),功能:只会导致当前线程的退出函数,参数:就是传递的退出状态(指针),通常使用:pthread_exit(0);,返回值:成功返回0,失败返回非负的错误号,进程对已经退出的线程必须要做回收线程资源的操作(否则会产生僵尸线程),int pthread_join(pthread_t thread,void*value_ptr),功能:阻塞等待回收退出的线程的资源,参数:thread,就是指定要回收的线程资源,value_ptr,就是接收到线程的退出状态。,返回值:成功返回0,失败返回非负的错误号,线程 int pthread_exit(void*val,17,线程的控制,控制线程:,互斥锁:主要用来保护临界资源(可是变量,后者是代码段),任何时刻最多只能有一个线程能访问该资源,相关函数接口:,int pthread_mutex_init(pthread_mutex_t *mutex,pthread_mutexattr_t*attr),功能:锁的初始化函数,即生成一把锁,参数:mutex,是锁的标识符,attr,设置锁的属性,通常为NULL。,返回值:返回值:成功返回0,失败返回非负的错误号,线程的控制控制线程:,18,线程控制,int pthread_mutex_lock(pthread_mutex_t*mutex),功能:阻塞等待直到这把锁申请成功为止,对临界资源进行上锁操作,参数:mutex,就是指定的一把锁,返回值:成功返回0,失败返回非负的错误号,int pthread_mutex_unlock(pthread_mutex_t*mutex),功能:对临界资源进行解锁操作,参数:mutex,就是指定要解开的锁,返回值:成功返回0,失败返回非负的错误号,int pthread_mutex_destroy(pthread_mutex_t*mutex);,功能:销毁一把指定的锁,参数:mutex,就是指定要销毁的锁,返回值:成功返回0,失败返回非负的错误号,注意:为了避免死锁:在申请多把锁时,所有的线程都按照同样的顺序去申请。,线程控制int pthread_mutex_lock(pt,19,线程之间的通信,-,条件变量,int pthread_cond_init(pthread_cond_t*restrict cond,const pthread_condattr_t*restrict attr);,功能:初始化一个条件变量,参数:cond,就是条件变量的标识符,attr,通常为NULL即可,返回值:成功返回0,失败返回非负的错误号,int pthread_cond_wait(pthread_cond_t*restrict cond,pthread_mutex_t*restrict mutex);,功能:条件睡眠,直到被指定的条件唤醒为止,参数:cond,就是指定睡眠 条件,将来被唤醒时也必须满足该条件,mutex,该函数睡眠时必须提前加上一把锁,注意:该睡眠函数调用之前必须先加上一把锁,然后进入睡眠,然后该函数内部,将锁解开;当该函数被唤醒时,需要重新加上这把锁,如果发现这把锁被其他线程,占用,那么该函数的唤醒操作就失败了,继续睡眠。,返回值:成功返回0,失败返回非负的错误号,线程之间的通信-条件变量 int pthread_co,20,线程之间的通信,-,条件变量,int pthread_cond_signal(pthread_cond_t*cond);,功能:就是唤醒睡眠在cond条件上的线程,但是只能唤醒一个线程,参数:cond,就是指定要唤醒的条件,返回值:成功返回0,失败返回非负的错误号,int pthread_cond_broadcast(pthread_cond_t*cond);,功能:唤醒所有睡眠这个条件上的线程,int pthread_cond_destroy(pthread_cond_t*cond);,功能:就是销毁条件变量,线程之间的通信-条件变量int pthread_cond_,21,处理消息队列请求线程,处理消息队列请求线程,22,消息对列,创建/打开消息队列对象,int msgget(key_t key,int flag);,参数:key,ftok()函数的返回值,用于确保多个进程操作同一个消息队列,flag,IPC_CREAT IPC_EXCL 和共享内存一样,返回值:成功返回消息队列的标识符,失败-1,比如:msgget(key,IPC_CREAT|IPC_EXCL|0666);,消息对列创建/打开消息队列对象,23,消息对列,int msgsnd(int m