当前位置:   article > 正文

用ESP 8266模块AT指令开发无线通信系统_esp8266at指令c语言

esp8266at指令c语言

最近一直在做关于气浮台的项目,里面有一个小环节就是需要把设备的数据传输下来,因为之前对通信几乎是小白,加上时间比较紧,凡是涉及到底层的东西都不敢碰,最后比较了一番选了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函数的具体用法在此不详述了,不熟悉的朋友可以去百度。

  1. espCom = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
  2. if (espCom == INVALID_HANDLE_VALUE)
  3. {
  4. printf("open COM3 failed\n");
  5. exit(2);
  6. }

提醒一下大家,如果设备的串口不是COM1-COM9,比如是COM10,那么函数第一个不能写成“COM10”了,得写成“\\\\.\\COM10”,因为COM10以上的串口对于文件名系统而言只是一般的文件,而非串行设备。

2. 完成串口相应的配置工作

  1. espTimeOuts.ReadIntervalTimeout = 500;//MAXDWORD; //5000;
  2. espTimeOuts.ReadTotalTimeoutConstant = 5000; //0;//1000;
  3. espTimeOuts.ReadTotalTimeoutMultiplier = 500;// 0;//500;
  4. espTimeOuts.WriteTotalTimeoutConstant = 2000;
  5. espTimeOuts.WriteTotalTimeoutMultiplier = 500;
  6. if (!SetCommTimeouts(espCom, &espTimeOuts))
  7. {
  8. printf("写入超时参数错误\n");
  9. exit(3);
  10. }
  11. if (!SetupComm(espCom, 1024, 1024))
  12. {
  13. printf("设置串口读写缓冲区失败\n");
  14. exit(4);
  15. }
  16. if (!GetCommState(espCom, &espdcb))
  17. {
  18. printf("获取串口属性失败\n");
  19. exit(5);
  20. }
  21. espdcb.BaudRate = BAUD_RATE;
  22. espdcb.ByteSize = 8;
  23. espdcb.Parity = NOPARITY;
  24. espdcb.StopBits = ONESTOPBI
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/410625?site
推荐阅读
相关标签
  

闽ICP备14008679号