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