手把手带你使用ESP8266 与 STM32F103C8实现网络服务器

这篇具有很好参考价值的文章主要介绍了手把手带你使用ESP8266 与 STM32F103C8实现网络服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

esp8266与stm32连接原理图,嵌入式,单片机,stm32
随着现在物联网设备的而越来越多,现在市场上出现越来越多的物联网设备,其中 ESP8266 是最受欢迎、价格便宜且易于使用的模块,它可以将您的硬件连接到互联网。

今天我们就以ESP8266和STM32来实现一台网络服务器,我们使用 ESP8266 将 STM32F103C8 连接到互联网。 ESP8266 Wi-Fi 模块与 STM32F103C8 板接口,并将数据发送到 ESP8266 网络服务器上托管的网页。

所需硬件

  • STM32F103C8板
  • ESP8266 无线无线模块
  • 笔记本电脑和无线网络热点

ESP8266 模块

大多数人将 ESP8266 称为 WIFI 模块,但它实际上是一个微控制器。ESP8266 是乐鑫公司(一家总部位于上海的公司)开发的微控制器的名称。该微控制器具有执行WIFI相关活动的能力,因此被广泛用作WIFI模块。

esp8266与stm32连接原理图,嵌入式,单片机,stm32
esp8266与stm32连接原理图,嵌入式,单片机,stm32

引脚说明

  • GND:接地
  • TX:发射传输数据位
  • GPIO2:通用输入/输出 2
  • CH_PD:使能
  • GPIO0:通用输入/输出0
  • RST:复位
  • RX:接收数据位
  • VCC:+3.3 V

常用AT指令

AT 命令用于与 ESP8266 通信。下表显示了一些常用的 AT 命令
esp8266与stm32连接原理图,嵌入式,单片机,stm32

电路图和连接

下图显示了STM32和ESP8266无线模块之间的连接。
esp8266与stm32连接原理图,嵌入式,单片机,stm32

esp8266与stm32连接原理图,嵌入式,单片机,stm32

SMT32F103C8具有三套UART串行通信。在下图中,您可以看到相同的以下引脚:
esp8266与stm32连接原理图,嵌入式,单片机,stm32
ESP8266 使用串行通信与STM32进行通讯。所以这里 ESP8266 的 TX 和 RX 都与 STM32 板的串行 2 端口 (PA2 和 PA3) 连接。

代码解释

ESP8266 与 STM32 的接口工作非常简单。您可以在本教程末尾的代码中找到完整的工作。

首先,我们需要按照电路图中所示进行电路连接。上传代码后,打开串行监视器(工具>>串行监视器)以查看发生的情况。您将在串行监视器上看到IP地址,从串行监视器复制IP地址并将其粘贴到浏览器中,然后单击Enter以查看我们的网页。请记住将计算机和 ESP8266 模块连接到同一 Wi-Fi 网络上。

完整的代码在最后给出,并通过注释很好地解释了,在这里我们解释了其中的几个重要部分。

首先,我们使用以下两个语句开始串行监视器和 ESP8266 的串行通信:

Serial.println(cmd);
Serial2.println(cmd);

注意: 我使用过STM32串行2端口的引脚(PA2,PA3),因为它可以承受3.3V。

然后,我们需要让 ESP8266 准备就绪,方法是通过重置任何旧的已连接的 AP 并将其设置为 AP 和 STA 来退出任何旧的 AP

connect_wifi("AT",100);  //Sends AT command with time(Command for Acknowledgement)
connect_wifi("AT+CWMODE=3",100);   //Sends AT command with time (For setting mode of Wi-Fi)
connect_wifi("AT+CWQAP",100);  //Sends AT command with time (for Quit AP)
connect_wifi("AT+RST",5000);   //Sends AT command with time (For RESETTING WIFI)

然后将 ESP8266 与无线网络连接。您必须填写您的Wi-Fi详细信息,如下面的代码所示:

connect_wifi("AT+CWJAP=\"Pramo\",\"pokemon08\"",7000);  //provide your WiFi username and password here

然后我们获取 ESP8266 模块的 IP 地址,并使用下面的代码将其显示在串行监视器上

Serial2.println("AT+CIFSR");           //GET IP AT COMMAND
if(Serial2.find("STAIP,"))                 //This finds the STAIP that is the STATIC IP ADDRESS of ESP8266
Serial.print(IP);                                //prints IP address in Serial monitor

接下来,我们将为网页编写 HTML 代码。要将HTML代码转换为Arduino代码,您可以使用此链接。

HTML在线转Arduino代码

webpage = "<h1>Welcome to Circuit Digest</h1><body bgcolor=f0f0f0>"; //This is the heading line with black font colour
String name="<p>Circuit Digest</p><p>A community of electrical and electronics students, engineers and makers</p>";
String data="<p>Data Received Successfully.....</p>";     //These two lines are of two paragraph
webpage = "<a href=\"http://circuitdigest.com/\"";
webpage+="\">Click Here to get into circuitdigest.com</a>"; //At last we insert the hyperlink to link the website address

接下来在void send() 函数中,我们使用发送网络数据函数打印了HTML,并使用AT + CIPCLOSE = 0关闭了服务器连接

完成所有工作后,您可以通过在任何 Web 浏览器中打开 ESP8266 的 IP 并单击网页上显示的链接来测试工作,单击此处进入 circuitdigest.com,如下所示
esp8266与stm32连接原理图,嵌入式,单片机,stm32
单击链接后,您会在网页上看到一条文本,上面写着Data Received Successfully.....

完整代码

//Interfacing ESP8266 Wi-Fi with STM32F103C8

//CIRCUIT DIGEST

//NOTE: Serial is serial monitor with baud rate(9600)

//NOTE: Serial2 (TX2, RX2)is connected with ESP8266(RX,TX)respectively with baud rate (9600)


String webpage = ""; //String variable to store characters

int i = 0, k = 0, x = 0; //integer variables

String readString; //using readString feature to read characters                       


boolean No_IP = false; //boolean variables 

String IP = ""; //String variable to store data

char temp1 = '0'; //character variable


String name = "<p>Circuit Digest</p><p>A community of electrical and electronics students, engineers and makers</p>"; //String with html notations

String data = "<p>Data Received Successfully.....</p>"; //String with html 



void check4IP(int t1) //A function to check ip of ESP8266 

{

    int t2 = millis();

    while (t2 + t1 > millis())

    {

        while (Serial2.available() > 0)

        {

            if (Serial2.find("WIFI GOT IP"))

            {

                No_IP = true;

            }

        }

    }

}


void get_ip() //After cheacking ip ,this is a function to get IP address

{

    IP = "";

    char ch = 0;

    while (1)

    {

        Serial2.println("AT+CIFSR"); //GET IP AT COMMAND

        while (Serial2.available() > 0)

        {

            if (Serial2.find("STAIP,")) //This finds the STAIP that is the STATIC IP ADDRESS of ESP8266

            {

                delay(1000);

                Serial.print("IP Address:");

                while (Serial2.available() > 0)

                {

                    ch = Serial2.read(); //Serial2 reads from ESP8266

                    if (ch == '+')

                        break;

                    IP += ch;

                }

            }

            if (ch == '+')

                break;

        }

        if (ch == '+')

            break;

        delay(1000);

    }

    Serial.print(IP); //prints IP address in Serial monitor

    Serial.print("Port:");

    Serial.println(80);

}


void connect_wifi(String cmd, int t) //This function is for connecting ESP8266 with wifi network by using AT commands

{

    int temp = 0, i = 0;

    while (1)

    {

        Serial.println(cmd); //Sends to serial monitor

        Serial2.println(cmd); //sends to ESP8266 via serial communication

        while (Serial2.available())

        {

            if (Serial2.find("OK"))

                i = 8;

        }

        delay(t);

        if (i > 5)

            break;

        i++;

    }

    if (i == 8)

        Serial.println("OK");

    else

        Serial.println("Error");

}


void wifi_init() //This function contains AT commands that passes to connect_wifi()

{

    connect_wifi("AT", 100); //Sends AT command with time(Command for Achknowledgement)

    connect_wifi("AT+CWMODE=3", 100); //Sends AT command with time (For setting mode of Wifi)

    connect_wifi("AT+CWQAP", 100); //Sends AT command with time (for Quit AP)

    connect_wifi("AT+RST", 5000); //Sends AT command with time (For RESETTING WIFI)

    check4IP(5000);

    if (!No_IP)

    {



        Serial.println("Connecting Wifi....");

        connect_wifi("AT+CWJAP=\"Pramo\",\"pokemon08\"", 7000); //provide your WiFi username and password here



    } else

    {

    }

    Serial.println("Wifi Connected");

    get_ip();



    connect_wifi("AT+CIPMUX=1", 100); //Sends AT command with time (For creating multiple connections)

    connect_wifi("AT+CIPSERVER=1,80", 100); //Sends AT command with time (For setting up server with port 80)

}


void sendwebdata(String webPage) //This function is used to send webpage datas to the localserver

{

    int ii = 0;

    while (1)

    {

        unsigned int l = webPage.length();

        Serial.print("AT+CIPSEND=0,");

        Serial2.print("AT+CIPSEND=0,");

        Serial.println(l + 2);

        Serial2.println(l + 2);

        delay(100);

        Serial.println(webPage); //sends webpage data to serial monitor

        Serial2.println(webPage); //sends webpage data to serial2 ESP8266

        while (Serial2.available())

        {



            if (Serial2.find("OK"))

            {

                ii = 11;

                break;

            }

        }

        if (ii == 11)

            break;

        delay(100);

    }

}


void setup()

{

    Serial.begin(9600); //begins serial monitor with baud rate 9600

    Serial2.begin(9600); //begins serial communication with esp8266 with baud rate 9600 (Change according to your esp8266 module)

    wifi_init();

    Serial.println("System Ready..");

}


void loop()

{

    k = 0;

    Serial.println("Please Refresh your Page");

    while (k < 1000)

    {

        k++;

        while (Serial2.available())

        {

            if (Serial2.find("0,CONNECT"))

            {

                Serial.println("Start Printing");

                Send();

                Serial.println("Done Printing");

                delay(1000);

            }

        }

        delay(1);

    }

}


void Send() //This function contains data to be sent to local server

{

    webpage = "<h1>Welcome to Circuit Digest</h1><body bgcolor=f0f0f0>";

    sendwebdata(webpage);

    webpage = name;

    sendwebdata(webpage);

    delay(1000);

    webpage = "<a href=\"http://circuitdigest.com/\"";

    webpage += "\">Click Here to get into circuitdigest.com</a>";

    webpage += data;

    sendwebdata(webpage);

    Serial2.println("AT+CIPCLOSE=0"); //Closes the server connection

}

结语

看到这里相信你已经知道了使用共ESP266与STM32通讯的整个思路和流程了,快拿你的设备来试一下吧,相信你也可以成功的!文章来源地址https://www.toymoban.com/news/detail-818428.html

👇点击下方公众号卡片获取资料👇

到了这里,关于手把手带你使用ESP8266 与 STM32F103C8实现网络服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你使用USB的CDC+MSC复合设备(基于stm32f407)

      最近对usb有点兴趣,感觉挺好玩的,于是买了本圈圈大神的经典著作-圈圈教你玩USB,里面使用51单片机+usb芯片对usb的基本知识潺潺道来,做了十个左右的常用案例实验,很有趣,建议大家看看。   趁热打铁,拿身边的开发板来练练手,探索一下复合设备的好玩方便的

    2024年02月13日
    浏览(25)
  • 手把手教你写stm32f103智能风扇

    本系统可以分为两个模式来进行运行,分别为手动模式和自动模式,同时,在上电进入系统后,还会有一个模式选择的界面产生。 模式选择:在此界面中,可以通过按键K1来控制模式选择,两个模式分别为手动模式和自动模式;通过按键K2可以进入模式。 手动模式:在手动模

    2023年04月17日
    浏览(24)
  • 基于STM32F103RCT6之手把手教你写智能家居项目(2)

            上一节我们简述了智能家居项目,实现了点灯的相关代码编写,还有WIFI模块的固件烧录。 连接什么平台:         我们想要远程控制家具的开关和获取家中的状态,少不了一个可以传输数据的云平台。我认为易监控是一个简单好用的云平台。 怎么连接平台:

    2024年02月20日
    浏览(20)
  • NodeMCU ESP8266 点亮LED灯手把手教程(图文并茂+超级详细)

    大家如果学过编程,那么 Hello World 往往是大家写下的第一个程序,在C语言中,看着控制台输出 hello world ,也就意味着我们敲开了编程的大门。同样的,点亮一个LED灯可以说是嵌入式里的 hello world 。 NodeMCU ESP8266是一款基于ESP8266芯片的开发板。之前我们有做过介绍,这个开发

    2024年02月05日
    浏览(49)
  • 手把手教你做一个物联网垃圾桶(ARDUINO ESP8266)

    最近自创的项目结题了,就顺手将相关的技术细节记录一下,也给需要做自创的同学提供一个简单的可复制的小项目 智能垃圾桶的选型 通过充分考虑实际生活场景,加入了 IP65 级别防水设计,可以满足大多数需要场景,此外采用升压和可充电电池, 践行环保理念 ,实现长续

    2024年02月03日
    浏览(39)
  • 图文手把手教程--ESP32 一键配网(Smartconfig、Airkiss)

    1)使用smart_config例程,使用乐鑫ESPTouch APP或者微信公众号配网。 2)修改smart_config例程,使ESP32复位后,如果已配过网,则不再进行配网,而是直接连接路由器上网,使贴近实际项目开发。 图文手把手教程(史上最强):windows下ESP32集成开发环境搭建和HelloWorld显示(乐鑫官方

    2023年04月19日
    浏览(20)
  • 手把手使用Micropython+合宙Esp32c3(驱动安装,为合宙Esp32c3安装Micropython固件库,代码上传到ESP32C3中)含Thonny和vscode两种方法

    CH343驱动下载 下载最新版本就好 驱动下载好后,以管理员身份运行,并点击“安装” 安装完成之后连接设备就可以在设备管理器中看到自己设备及端口 MicroPython 是一种精简版的 Python 语言实现,专门用于嵌入式系统和物联网设备。它提供了一个适用于微控制器的交互式解释

    2024年02月10日
    浏览(20)
  • STM32系列——手把手教你将SYN6288语音播报模块的标准库程序转为hal库使用

    目录 前言 1. 原理 2. Cubmx配置 3. keil5编写代码 3.1 main.c 3.2 syn6288.c 3.3 syn6288.h 本教程基于 stm32f103c8t6 最小系统板, hal库 开发。 操作简单,讲解直接清楚,旨在让大家少走弯路。 SYN6288就是用到一个串口资源即可,用STM32开发起来不难。 配置串口3为异步通信模式 ,注意波特率

    2024年02月07日
    浏览(33)
  • STM32系列——手把手教你蓝牙模块HC05、HC06的使用,重在“用起来”(HAL库)

    不论是HC05还是HC06,我们用到的都是蓝牙模块的透传功能,只需要用到4个引脚:RXD、TXD、VCC(5V)、GND。 1、HC-05有6个引脚,但是我们只用到4个。 2、HC-05正面有一个按键。与HC-06的区别是, 它上电之前必须要按住此按键再插入电脑中,才能够进入AT模式 。HC-06没有按键,直接

    2024年02月05日
    浏览(32)
  • 手把手教你编写跑马灯——STM32

    新建一个文件夹 ,打开KeiL,projiece-----new vision projection  给文件命名(随便取)  根据自己开发板的信号选择对应的型号  在刚才创建的文件夹里面 新建一个main.c文件  双击source group 1,点击main.c,点击add  添加头文件 led.c main.c led就可以全亮然后全灭一直循环

    2024年02月08日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包