ESP8266 WIFI模块学习之路(11)——WIFI模块通过VC自动配置,实现远程关闭电脑

根据前几个博客,也是能实现远程关闭电脑的,但ESP8266模块的命名需要手动下载,其实为了实现方便,我们需要自动下载AT命令,这样我们就更方面了,就能够实现真正的远程控制。

现在需要实现的功能是:

            1.通过VC实现数据下发给USB串口,通过串口下发的数据来配置AT命令。

            2.实现手机和模块的直接通信

下一个博文将讲一下通过路由器进行控制(局域网控制)。代码如下:

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//



#include "pch.h"


#define _CRT_SECURE_NO_WARNINGS 
#include 
#include 
#include 
#include 
#include 
#include "tchar.h"

char flag = 0;	//	wt
int main()
{
	HANDLE hCom;
	hCom = CreateFile(_T("COM4"),//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];
		char sendData[256]={0};	//	写入串口缓存区的数组	王艇
		if(0 == flag)
		{
			strcpy(sendData,"AT+CIPMODE=1\r\n");	//	AT+CIPMODE=1
			DWORD dwWritelen = 0;		//	wt
			if(!WriteFile(hCom,sendData,14,&dwWritelen,NULL))		//	wt
			{
				//printf("串口发送数据失败!\n");
			}
			printf("AT+CIPMODE=1串口发送数据成功!\n");	//	wt

			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]);
			}

			strcpy(sendData,"AT+CIPSTART=\"TCP\",\"192.168.4.2\",8080\r\n\r\n");	//	AT+CIPSTART=\"TCP\",\"192.168.4.2\",8080		
			dwWritelen = 0;		//	wt
			if(!WriteFile(hCom,sendData,40,&dwWritelen,NULL))		//	wt
			{
				printf("串口发送数据失败!\n");
			}
			for(i=0;i<60000;i++);
			printf("AT+CIPSTART=\"TCP\",\"192.168.4.2\",8080串口发送数据成功!\n");	

			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]);
			}



			flag = 1;
		}


		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]);
		}
		if('W' == str[0])		//	wt
		{
			system("shutdown -p");
		}
		printf("\n");
		fclose(fp1);
	}

	CloseHandle(hCom);

    std::cout << "Hello World!\n";

	return 0;
}







// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门提示: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

这样就实现了AT的命令的自动下载,然后自动连接。

         注意:在模块启动后,要先将手机连接到模块的WIFI上,如:ESP8266 WIFI模块学习之路(11)——WIFI模块通过VC自动配置,实现远程关闭电脑_第1张图片

                   然后,打开有人网络助手激活端口(端口号要和代码中一致),若连接成功,则如下图效果:

电脑端:

ESP8266 WIFI模块学习之路(11)——WIFI模块通过VC自动配置,实现远程关闭电脑_第2张图片

手机端:

ESP8266 WIFI模块学习之路(11)——WIFI模块通过VC自动配置,实现远程关闭电脑_第3张图片

程序中实现是输入W   就可以实现电脑自动关机。

你可能感兴趣的:(单片机c语言)