ESP8266 WIFI模块学习之路(9)——C++实现通过电脑串口读取ESP8266数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XiaoCaiDaYong/article/details/89226518

想自己实现一个远程控制电脑关机的套件:

  1. 不能使用串口助手,只能想法自己实现一个类似串口助手一样的功能(能够读出串口数据,能通过串口下命名)
  2. 基于一种硬件实现——ESP8266模块
  3. 手机控制:我先是想通过手机网络助手来实现这个功能,如果实现准备自己写一个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("读取长度为:%d\n", 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

可以下载使用

猜你喜欢

转载自blog.csdn.net/XiaoCaiDaYong/article/details/89226518