iOS之app直接和硬件交互、wifi、红外、蓝牙、zigbee、监控摄像头相关

app和硬件交互的几种方式:zigbee,蓝牙,wifi、nfc交互、声波。https://www.jianshu.com/p/aaf963fd6ebe

手机访问硬件的几种模式:https://blog.csdn.net/zoomdy/article/details/51594977

https://blog.csdn.net/qq_33570093/article/details/81567758

App连接外设的几种方式:https://www.jianshu.com/p/df5804b556ce

WiFi(短距离):主要还是硬件可以通过wifi连接到路由,通过路由连接上互联网。app连接硬件,通过socket通信,通过socket设置ssid和密码,在各式各样的硬件上植入软ap,再利用手机连接软ap配置路由的ssid和密码, 然后智能硬件就可以自行连接了路由器了,也就实现了上网的功能.硬件中的软ap连接路由器后,通过我们自己的服务器处理,手机通过4G网络也能够控制智能硬件了.

WIFI模块各种常见的配网方式说明及其比较:https://blog.csdn.net/changyourmind/article/details/78631357

蓝牙:coreblooth框架。

zigbee技术--------http://www.sohu.com/a/111730833_467791、https://blog.csdn.net/u014293306/article/details/46278401

ZigBee技术是一种近距离、低复杂度、低功耗、低速率、低成本的双向无线通讯技术。

主要用于距离短、功耗低且传输速率不高的各种电子设备之间进行数据传输以及典型的有周期性数据、间歇性数据和低反应时间数据传输的应用。

云端模式(远程控制):手机与服务器交互,服务器与硬件交互。

方式一 红外转发:通过智能主机可以直接控制空调、电视、机顶盒等通过红外线遥控的产品
方式二 射频控制:通过智能主机发射射频信号(RF315/433MHZ、Zigbee、蓝牙等)去控制带有接受信号的开关、插座、窗帘控制器、开窗器、门锁、等;同时主机也能将被动的接受自红外传感器、门磁、烟雾报警、煤气报警、漏水检测等传过来的射频信号,转为手机app的推送消息告诉用户信息。
方式三 Wifi连接:内置wifi 模块,与用户家里的路由器相连
方式四 云端服务器:拥有云端服务器,拥有98%红外码库、市面中的空调、电视、机顶盒等红外产品都无需学习直接调用红外码库、即可直接使用。

 

物联网通讯协议:https://blog.csdn.net/wang_walfred/article/details/48802439、http://1472011440.spaces.eepw.com.cn/articles/article/item/124455:

zigbee技术-------http://www.sohu.com/a/111730833_467791、https://blog.csdn.net/u014293306/article/details/46278401

zigbee网络攻防:https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=16143&highlight=iot

ZigBee技术是一种近距离、低复杂度、低功耗、低速率、低成本的双向无线通讯技术。

主要用于距离短、功耗低且传输速率不高的各种电子设备之间进行数据传输以及典型的有周期性数据、间歇性数据和低反应时间数据传输的应用。

ZigBee网内使用ZigBee协议进行通讯,数据到ZigBee网关(可理解为协调器+以太网转换)转换为TCP报文发送给指定IP指定端口,远程服务器需要建立一个TCP Server对端口号进行监听,接收到报文后即可提取有效数据写入数据库。

单纯zigbee是无法将数据发往以太网的,你需要做一个Zigbee / TCP 网关。具体结构可以是用廉价的ESP8266wifi模块,和Zigbee协调器之间通过UART相连,ESP8266负责接受Zigbee协调器的数据,并通过wifi发往具体的TCP Server地址。

传感器通过ZigBee组网再通过网关发送数据给数据库。

ZigBee使用那种协议?

IEEE802.15.4协议,这是一种低传送速率的无限PAN的协议。在标准化方面,IEEE802.15.4工作组主要负责制定物理层和MAC层的协议,其余协议主要参照和采用现有的标准,高层应用、测试和市场推广等方面的工作将由ZigBee联盟负责。

在物联网中,设备与设备的通信存在两类协议。第一类协议是接入协议(传输协议):负责子网内设备间的组网及通信。这类协议包括:Zigbee,WiFi,蓝牙。第二类协议是通信协议,负责通过传统互联网与服务器、APP或设备进行交换数据,包括HTTP,MQTT,websocket、XMPP、COAP。

zigbee和intenet远程监控系统的设计:https://wenku.baidu.com/view/09223b17240c844768eaee09.html

zigbee和服务器的数据传输原理:服务器端的数据接收模块主要由串口接收程序和tcp服务构成,主要通过串口协议、tcp\ip协议和zigbee网络建立连接,通过zigbee协调器和intenet网关获取zigebee网络监测的数据,进行适当的编码传给后台。

 

监控摄像头--------

#import 
#import "Cvs2ResEntity.h"


#define SP_ERROR_MSG                        2001    //错误的消息体格式
#define SP_ERROR_PARAM                      2002    //错误的参数
#define SP_ERROR_NOT_SUPPORT                2003    //不支持的操作
#define SP_ERROR_VERITY_FAILED              2004    //目标鉴权失败
#define SP_ERROR_EPID                       2006    //EPID鉴权失败
#define SP_ERROR_TIMEOUT                    2009    //命令超时
#define SP_ERROR_ROUTE                      2010    //路由失败
#define SP_ERROR_DISPATCHER                 2018    //没有可用的分发单元

#define MC_ERROR_INTER_PARAM                3002    //函数参数错误
#define MC_ERROR_REQUEST_TIMEOUT            3003    //请求超时
#define MC_ERROR_ADDRESS                    -3002   //服务器地址或端口不可达
#define MC_ERROR_CONNECT_TIMEOUT            -3003   //命令连接超时
#define MC_ERROR_ROUTE                      -3008   //路由失败
#define MC_ERROR_CUI                        -3009   //服务为开启
#define MC_ERROR_CONNECT_ADDRESS            -3010   //地址不可达
#define MC_ERROR_USER                       -3301   //用户不存在
#define MC_ERROR_USER_DISABLED              -3302   //用户被禁用
#define MC_ERROR_PASSWORD                   -3306   //密码错误
#define MC_ERROR_CHECK_TIMEOUT              -3309   //认证超时
#define MC_ERROR_ROUTE_CUI                  -3310   //路由失败
#define MC_ERROR_NO_CUI                     -3503   //没有在线的用户接入服务
#define MC_ERROR_REDIRECT_CUI               -3504   //没有支持重定向的用户接入服务
#define DC_ERROR_DATA_TIMEOUT               -4005   //数据通道请求超时
#define DC_ERROR_CONNECT                    -4006   //连接错误
#define DC_ERROR_TCP_SEND                   -4007   //TCP发送出错
#define DC_ERROR_TCP_RECV                   -4008   //TCP接收出错

typedef enum // 云台的转动的方向
{
    kCvs2PtzUp = 0,
    kCvs2PtzDown,
    kCvs2PtzLeft,
    kCvs2PtzRight,
}Cvs2PtzTurnDirection;

@class Cvs2VideoView;
@protocol MCHelperDelegate;

@interface MCHelper : NSObject

@property (nonatomic, readonly) NSString *version;
@property (nonatomic, assign) iddelegate;

/**
 *	@brief              连接服务器
 *
 *	@param 	address     地址
 *	@param 	usPort      端口
 *	@param 	userName 	用户名
 *	@param 	password 	密码
 *	@param 	epid        epid
 *	@param 	fixedAddr   是否开启穿透网闸
 *
 *	@return             返回的错误码 0表示登录成功
 */
- (NSInteger)login:(NSString *)address
              port:(unsigned short)usPort
              user:(NSString *)userName
               psd:(NSString *)password
              epid:(NSString *)epid
         fixedAddr:(BOOL)fixed;

/**
 *	@brief	退出服务器
 */
- (void)loginOut;

/**
 *	@brief	获取当前服务器下所有的设备, 确保之前已经调用了fetchDomainNode,获取成功以后可以在rootDomain的childrenArray集合中查找
 *          这个函数会去发网络远程命令,一般只需要调用一次,除非想刷新资源.
 *	@param 	pDomain 	域节点
 *
 *	@return	错误码; 0表示成功
 */
- (NSArray *)fetchPeerUnits:(NSInteger *)error;

/**
 *	@brief	获取摄像头资源,确保之前已经调用了fetchDomainNode和fetchPeerUnits。如果参数peerUnit为空,则获取所有的设备。
 *          获取成功以后,如果想要查找某个摄像头,应该用摄像头的PUID和cIdx在对应的Cvs2PeerUnit实例的childrenArray集合中查找
 *
 *  @param 	pPU 	可为NULL或者域下某个具体的设备对象
 *
 *	@return	错误码; 0表示成功
 */
- (NSInteger)fetchCameras:(Cvs2PeerUnit *)peerUnit;

/**
 *	@brief	单独获取指定的PUID的设备和摄像头资源
 *
 *  @param 	puid
 *  @error 	错误码
 *  @param 	puid
 *
 *	@return	Cvs2PeerUnit 返回的Cvs2PeerUnit需要上层调用者释放。
 */
- (Cvs2PeerUnit *)fetchOnePU:(NSString *)puid error:(NSInteger *)err;

/**
 *	@brief	渲染视频接口.
 *
 *	@param 	puid 	视频资源的PUID
 *	@param 	ucIdx 	视频资源的index
 *	@param 	type 	流类型 0:高清 1:标清 注意:设备支持高清流,但标清不一定支持。
 *	@param 	renderView 	播放窗口, renderView必须是Cvs2VideoView类的实例.
 *
 *	@return	0 成功
 */
- (NSInteger)rend:(NSString *)puid index:(unsigned char)ucIdx streamType:(NSInteger)type target:(UIView *)renderView;

/**
 *	@brief	停止视频
 */
- (void)stopRend;

/**
 *	@brief	转动摄像头,设备必须有云台才能转动
 *
 *	@param 	pVideo 	摄像头对象
 *	@param 	direction 	转动的方向
 *
 *	@return	0表示成功
 */
- (NSInteger)ptzStartTurn:(Cvs2ResEntity *)pCamera direction:(Cvs2PtzTurnDirection)direction;

/**s
 *	@brief	停止转动摄像头
 *
 *	@param 	pVideo 	摄像头对象
 *
 *	@return	0 表示成功
 */
- (NSInteger)ptzStopTurn:(Cvs2ResEntity *)pCamera;

/**s
 *	@brief	移动云台至预置位,设备必须有云台才能转动
 *
 *	@param 	pVideo 	摄像头对象
 *
 *	@return	0 表示成功
 */
- (NSInteger)moveToPresetPos:(uint)pos videoRes:(Cvs2ResEntity *)pCamera;


- (UIImage *)currentImage;

/**s
 *	@brief	录制当前正在播放的视频.
 *
 *	@param 	path文件全路径,需带上后缀如.mp4
 *
 *	@return	0 表示成功
 */
- (NSInteger)startRecord:(NSString *)path;
- (void)stopRecord;

/**s
 *	@brief	抓拍.
 *
 *	@param 	path文件全路径,需带上后缀如.png
 *
 *	@return	0 表示成功
 */
- (BOOL)snapshot:(NSString *)path;
@end

/**
 *	@brief	代理类
 */
@protocol MCHelperDelegate 

/**
 *	@brief	这个代理方法是执行在子线程中,主要是侦测连接服务器,接受数据出错时返回的错误码
 *
 *	@param 	error 	返回的错误码
 */
- (void)connectError:(NSInteger)error;

@end

 

你可能感兴趣的:(iOS/oc)