赞
踩
最近一直在做关于气浮台的项目,里面有一个小环节就是需要把设备的数据传输下来,因为之前对通信几乎是小白,加上时间比较紧,凡是涉及到底层的东西都不敢碰,最后比较了一番选了ESP 8266这个模块来开发,通过AT指令进行开发,用的是C语言,运行在PC 104上(当然普通PC更没问题了),大概五天时间就做完了,下面介绍一下详细内容。
(一)ESP 8266模块介绍
这个模块的详细资料网上很容易找到,在此就不详述了,简单说几点吧。
这个模块开发有两种方式:第一种是用官方SDK来开发,适合对硬件有一定了解的朋友入手,因为这个模块本身的功能其实很强大,只用来通讯有点小题大做的感觉,但是这种方式不适合新手,入手难度有点高;第二种就是AT指令开发,很简单,拿一般的串口助手就可以调试。(注意调试的时候一定要先按回车再发送)
这个模块总共有三种工作方式:AP,STATION,AP+STATION。因为我需要完成的是多个设备数据传输,因此透传就不考虑了,这里我用的是一个模块用作热点同时开启服务器(用AP+STATION),通过串口接在终端上收数据;其他的模块通过串口接在设备上(用STATION)。相当于组建了一个小的局域网,基于TCP协议的WiFi通信。
这里再单独提一下,用AT指令开发有一个很头疼的地方在于指令的返回格式不统一,所以程序里面的判断条件会比较多。后面我会仔细的总结一下,其他的信息大家可以去找用户手册,里面对模块的介绍以及AT指令都比较完整。
(二)用C语言实现WIN 32下的串口通讯
这一步说白了就是怎么用C语言去完成串口助手最基本的功能,但是也必须要仔细,很多地方容易出错。
1. 首先打开串口,Createfile函数的具体用法在此不详述了,不熟悉的朋友可以去百度。
- espCom = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
- if (espCom == INVALID_HANDLE_VALUE)
- {
- printf("open COM3 failed\n");
- exit(2);
- }
提醒一下大家,如果设备的串口不是COM1-COM9,比如是COM10,那么函数第一个不能写成“COM10”了,得写成“\\\\.\\COM10”,因为COM10以上的串口对于文件名系统而言只是一般的文件,而非串行设备。
2. 完成串口相应的配置工作
- espTimeOuts.ReadIntervalTimeout = 500;//MAXDWORD; //5000;
- espTimeOuts.ReadTotalTimeoutConstant = 5000; //0;//1000;
- espTimeOuts.ReadTotalTimeoutMultiplier = 500;// 0;//500;
- espTimeOuts.WriteTotalTimeoutConstant = 2000;
- espTimeOuts.WriteTotalTimeoutMultiplier = 500;
- if (!SetCommTimeouts(espCom, &espTimeOuts))
- {
- printf("写入超时参数错误\n");
- exit(3);
- }
- if (!SetupComm(espCom, 1024, 1024))
- {
- printf("设置串口读写缓冲区失败\n");
- exit(4);
- }
- if (!GetCommState(espCom, &espdcb))
- {
- printf("获取串口属性失败\n");
- exit(5);
- }
- espdcb.BaudRate = BAUD_RATE;
- espdcb.ByteSize = 8;
- espdcb.Parity = NOPARITY;
- espdcb.StopBits = ONESTOPBI
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。