单片机学习小组
直播中

学电超人

12年用户 717经验值
擅长:微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制 微处理器/微控制
私信 关注

怎样通过ESP8266去搭建一种网络服务器呢

怎样通过ESP8266去搭建一种网络服务器呢?

回帖(1)

刘晓红

2022-2-22 14:01:37
软件准备



根据树莓的介绍,我们基于树莓派 pico 可以开发类开发官网环境

关于环境的好参考,国内有很多人问了,我已经在韦东山百网问了出的教程的开发环境:

硬件准备


在硬件开始实验前,需要准备好看看到硬件

连接


uart0我的串口模块PC连接显示,所以我从uart1开始使用,uart1给ESP8266使用。

[ tr 想要ESP8266[图片/tr]
虚拟总线VCC、CH-EN
GNDGND
UART1TX Pin6U0RXD
UART1RX Pin7U0TXD



C/C++实现代码


/**
*
*
* SPDX-License-Identifier: BSD-3-Clause
*/

#include
#include
#include
#include "pico/stdlib.h"
#include "pico/multicore.h"
#include "hardware/gpio.h"
#include "hardware/uart.h"

#define UART_ID uart1
#define BAUD_RATE 115200

#define UART_TX_PIN 4
#define UART_RX_PIN 5

#define RECV_BUFFER 256
char recv_buf[RECV_BUFFER];
int buff_count = 0;

无效 core1_entry()
{
    memset(recv_buf,'0',RECV_BUFFER);

        //printf("%c", uart_getc(UART_ID));
        recv_buf[buff_count++] = uart_getc(UART_ID);         
        if(buff_count >= RECV_BUFFER) buff_count = 0;
    }
}

int main() {
    stdio_init_all();

    // 以所需的速度设置我们的 UART。
    UART_init(UART_ID,波特率);

    // 使用 GPIO 上的功能选择设置 TX 和 RX 引脚
    // 设置数据表以获取有关功能选择的更多信息
    gpio_set_function(UART_TX_PIN, GPIO_FUNC_UART);
    gpio_set_function(UART_RX_PIN, GPIO_FUNC_UART);

    multicore_launch_core1(core1_entry);

    printf("在 ESP8266 上设置网络...n");
    printf(" - 将 CWMODE 设置为 1 站模式...n");
    uart_puts(UART_ID, "AT+CWMODE=1rn");
    睡眠毫秒(2000);
    printf(" - 加入 Wifi ...'n");
    uart_puts(UART_ID, "AT+CWJAP="baiwenwang","www.100ask.org"rn");
    睡眠毫秒(5000);
    printf("完成!nn");

    printf("在 ESP8266 上启动 Webserver 端口...n");
    睡眠毫秒(1000);
    printf(" - 为多个连接设置 CIPMUX...n");
    uart_puts(UART_ID, "AT+CIPMUX=1rn");
    睡眠毫秒(2000);
    printf(" - 在端口 80 上启动 CIPSERVER...n");
    uart_puts(UART_ID, "AT+CIPSERVER=1,80rn");
    printf("完成!nn");

    睡眠毫秒(1000);
    // 查询本地IP地址
    uart_puts(UART_ID, "AT+CIFSRrn");
    睡眠毫秒(1000);
    printf("%sn", recv_buf);  
    printf("等待连接...n");
    while (true) {
        if (strstr(recv_buf, "+IPD"))
        {   
            printf("!传入连接 - 发送网页");
            uart_puts(UART_ID, "AT+CIPSEND=0,108rn"); // 发送一个 HTTP 响应,然后是一个网页作为字节,108 是您发送的字节数,如果您更改在
            sleep_ms(1000) 以下发送的数据,请更改此值;
            uart_puts(UART_ID, "HTTP/1.1 200 OKrn");
            uart_puts(UART_ID, "内容类型: text/htmlrn");
            UART_puts(UART_ID,
            uart_puts(UART_ID, "rn");
            uart_puts(UART_ID, "rn");
            uart_puts(UART_ID, "rn");
            uart_puts(UART_ID, "它有效!rn");
            uart_puts(UART_ID, "rn");
            睡眠毫秒(1000);
            uart_puts(UART_ID, "AT+CIPCLOSE=0rn"); // 完成后关闭连接。
            睡眠毫秒(4000);
            printf("nn等待连接...n");
            睡眠毫秒(250);
            memset(recv_buf,'0',RECV_BUFFER);
            buff_count = 0;

实验现象


CW0+AP的命令模式AT=:

AT+1
AT+="baiwenwang","www.10ask.org"
+ CIPMUX=1
AT+CIPSERVER=1,80
AT+CIFSR
AT+CIPSEND=0,108
> HTTP/1.1 200 OK Content-Type: text/html Connection: close It Works!324

举报

更多回帖

发帖
×
20
完善资料,
赚取积分