概述
想自己实现一个远程控制电脑关机的套件:
- 不能使用串口助手,只能想法自己实现一个类似串口助手一样的功能(能够读出串口数据,能通过串口下命名)
- 基于一种硬件实现——ESP8266模块
- 手机控制:我先是想通过手机网络助手来实现这个功能,如果实现准备自己写一个Android软件。
所以先来完成串口数据的读取,这个是第一步。
经过网上资料的查阅,找到一篇博文,代码我拷贝下来了,但具体的连接已经忘记了,请博主看到不要见怪。
代码经过分析,不是很难理解,代码如下:
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#include "tchar.h"
int main()
{
HANDLE hCom;
hCom = CreateFile(_T("COM4"),//COM4口 因为我的ESP8266接上后显示是COM4
GENERIC_READ | GENERIC_WRITE,//允许读和写
0,//独占方式
NULL,
OPEN_EXISTING,//打开而不是创建
0,//同步方式
NULL);
if(hCom == (HANDLE)-1)
{
printf("打开COM失败!n");
return FALSE;
}
else
{
printf("COM打开成功!n");
}
SetupComm(hCom, 20480, 20480);//输入缓冲区和输出缓冲区的大小都是1024
COMMTIMEOUTS TimeOuts;//设定读超时
TimeOuts.ReadIntervalTimeout = 100;
TimeOuts.ReadTotalTimeoutMultiplier = 500;
TimeOuts.ReadTotalTimeoutConstant = 5000;
TimeOuts.WriteTotalTimeoutMultiplier = 500;//设定写超时
TimeOuts.WriteTotalTimeoutConstant = 2000;
SetCommTimeouts(hCom, &TimeOuts);//设置超时
DCB dcb1;
GetCommState(hCom, &dcb1);
dcb1.BaudRate = 115200;//波特率为115200
dcb1.ByteSize = 8;//每个字节有8位
dcb1.Parity = NOPARITY;//无奇偶校验位
dcb1.StopBits = TWOSTOPBITS;//两个停止位
dcb1.fParity = FALSE;
dcb1.fNull = FALSE;
SetCommState(hCom, &dcb1);
DWORD wCount = 256;//读取的字节数
DWORD wCount1;
PurgeComm(hCom, PURGE_TXCLEAR|PURGE_RXCLEAR);//清空缓冲区
while(1)
{
int i = 0;
FILE *fp1;
unsigned char str[256];
if(!ReadFile(hCom, str, wCount, &wCount1, NULL))
{
printf("读串口失败!");
return FALSE;
}
fp1 = fopen("串口发送的数.txt", "a+");
printf("读串口成功!n");
printf("读取长度为:%dn", wCount1);
printf("读取数据为:n");
for(i=0; i< wCount1; i++)
{
printf("%c ", str[i]);
fprintf(fp1, "%c ", str[i]);
}
printf("n");
fclose(fp1);
}
CloseHandle(hCom);
std::cout << "Hello World!n";
return 0;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门提示:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
博主的代码,我几乎没有修改,只是修改了读取的串口号。
接下来要配置我们的ESP8266模块,让模块处于数据发送状态。
模块如图:
1.模块
2.采用的USB-TTL
AT命令如下:
AT的下发,这里仍用电脑串口助手实现,我使用的是
AT+CWMODE=3 //设置为AP+STA
AT+RST //重启
AT+CWSAP="ESP8266","0123456789",1,0 // 设置完成后就可以用手机连接WIFI了
【注意】
连接WIFI WIFI名称为: ESP8266,如图:
上面这条命令执行后需要在手机端(有人网络助手)上Tcp server栏配置端口号为8080(可以自己配置),然后激活,如图:
AT+CIPMODE=1 //透传
AT+CIPMUX=0 //单路模式
AT+CIPSTART="TCP","192.168.4.2",8080 //链接
【注意】这里的IP是手机上的IP地址,查看链接ESP8266产生的WIFI后被分配的IP地址,如下图:
上面的AT命令执行成功后,手机上的效果。如图:
到这里,就已经实现手机与模块通信了,手机发送数据给模块,模块会通过USB串口传输给电脑。这下就可以运行上面我们粘贴的C++代码了(【注意】在运算C++代码时一定要记得关闭电脑串口助手,不然会因为串口被占用而连接不了),效果如图。
手机端输入:
电脑端:
我刚才输入两个WANTIN 和 wantin。
到这里就已经完成了本次博文,接下来想研究一下怎样通过手机来让电脑关机。
所有资源在:ESP8266 WIFI模块学习之路(9)
https://download.csdn.net/download/xiaocaidayong/11109252
可以下载使用
最后
以上就是糊涂洋葱为你收集整理的ESP8266 WIFI模块学习之路(9)——C++实现通过电脑串口读取ESP8266数据的全部内容,希望文章能够帮你解决ESP8266 WIFI模块学习之路(9)——C++实现通过电脑串口读取ESP8266数据所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复