这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【分享评测,赢取加热台】开箱测评SeeedstudioESP32-C3XIAO开

共1条 1/1 1 跳转至

【分享评测,赢取加热台】开箱测评SeeedstudioESP32-C3XIAO开发板+搭建Web服务+ChatGPT问答页面

助工
2025-01-08 02:06:58     打赏

简介

大家好今天给大家分享一款超级小的开发板,来自Seeed studio的ESP32C3小开发板。 那么具体由多小呢?我们来看一下下图的对比。左侧是一块正常大小的来自某宙的Esp32c3, 第二个便是我们今天的主角ESP32C3-XIAO。为了方便大家直观的观察到底有多小。这边放上了一个矿泉水的瓶盖。实际上它连矿泉水瓶盖大都没有。 

1d056ef3d4a0445a76d538c84065e91.jpg

下图为实际焊接好排针的样子

aa1426b1ad872b9a79122bddcbe6dfe.jpg

由于这个开发板实在是太小了,所以它的射频天线使用了外部引出的方式。

不过麻雀虽小,五脏俱全。除去5V,GND 和 3V3,它一共由11个可用的IO。 包括Analog, I2C, UART 和 SPI等。它具备400KB的Sarm 和 4MB的板载Flash 用于程序的烧录和存储。下图为具体的参数信息等。

image.png


环境搭建和Web服务构建

在我们已经对Xiao 开发板充分了解之后,我们便可以来搭建开发环境和基于官方的教程自己来构建一个Web的页面。


1- 首先我们打开Arduino,在首选项开发板管理器地址处添加Xiao的支持。

https: //raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json

接下来我们便可以在开发板管理器中找到ESP32C3-XIAO的支持

image.png

我们来尝试烧录一个blink的demo来验证环境是否正确配置成功。

// define led according to pin diagram in article
const int led = D10; // there is no LED_BUILTIN available for the XIAO ESP32C3.

void setup() {
  // initialize digital pin led as an output
  pinMode(led, OUTPUT);
}

void loop() {
  digitalWrite(led, HIGH);   // turn the LED on 
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off
  delay(1000);               // wait for a second
}


LED正常点亮无误。 不过由于开发板过于小, 所以这个LED需要外接在D10 PIN上。

dedb6cb46eefdf0a0916411fd8cc3bf.jpg

接着我们来尝试根据官方的教程来搭建一个WEB服务。首先让我们连接上WIFI

#include <WiFi.h>


const char* ssid = "你的WIFI名称";
const char* password = "你的WIFI密码";

void WiFiConnect(void)
{    
    WiFi.begin(ssid, password);    
    Serial.print("Connecting to ");    
    Serial.println(ssid);
    while (WiFi.status() != WL_CONNECTED) 
    {       
         delay(500);        
         Serial.print(".");   
     }
    Serial.println("");    
    Serial.println("WiFi connected!");    
    Serial.print("IP address: ");    
    Serial.println(WiFi.localIP());
}


void setup() 
{
  Serial.begin(115200);  
  WiFi.mode(WIFI_STA);  
  WiFiConnect();
}

void loop() 
{

}

此时我们即可正常获取到路由器分配的IP地址。

image.png接下来我们来构建一个Server , 使其在局域网内的其他设备可以放到到当前提供的服务。

WiFiServer server(80);
WiFiClient client1;

接着定义80端口将向外提供的服务页面数据。

const char html_page[] PROGMEM = {
    "HTTP/1.1 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Connection: close\r\n"  // the connection will be closed after completion of the response
    //"Refresh: 1\r\n"         // refresh the page automatically every n sec
    "\r\n"
    "<!DOCTYPE HTML>\r\n"
    "<html>\r\n"
    "<head>\r\n"
      "<meta charset=\"UTF-8\">\r\n"
      "<title>Cloud Printer: ChatGPT</title>\r\n"
      "<link rel=\"icon\" href=\"https://files.seeedstudio.com/wiki/xiaoesp32c3-chatgpt/chatgpt-logo.png\" type=\"image/x-icon\">\r\n"
    "</head>\r\n"
    "<body>\r\n"
    "<img alt=\"SEEED\" src=\"https://files.seeedstudio.com/wiki/xiaoesp32c3-chatgpt/logo.png\" height=\"100\" width=\"410\">\r\n"
    "<p style=\"text-align:center;\">\r\n"
    "<img alt=\"ChatGPT\" src=\"https://files.seeedstudio.com/wiki/xiaoesp32c3-chatgpt/chatgpt-logo.png\" height=\"200\" width=\"200\">\r\n"
    "<h1 align=\"center\">Cloud Printer</h1>\r\n" 
    "<h1 align=\"center\">OpenAI ChatGPT</h1>\r\n" 
    "<div style=\"text-align:center;vertical-align:middle;\">"
    "<form action=\"/\" method=\"post\">"
    "<input type=\"text\" placeholder=\"Please enter your question\" size=\"35\" name=\"chatgpttext\" required=\"required\"/>\r\n"
    "<input type=\"submit\" value=\"Submit\" style=\"height:30px; width:80px;\"/>"
    "</form>"
    "</div>"
    "</p>\r\n"
    "</body>\r\n"
    "<html>\r\n"
};


定义几个变量用于存储数据信息。

String json_String = "";  // JSON 数据的字符串
String dataStr;           // 存储 HTTP 方法
int dataStart;            // 存储数据起始位置
String chatgpt_Q;         // 存储用户提交的问题

在Setup中调用Server.beign() 来启动80服务。

void setup() 
{  
    Serial.begin(115200);  
    WiFi.mode(WIFI_STA); 
    WiFiConnect();  
    server.begin();
}

在loop中来发送服务的内容,即上述定义的字符串信息,同时接收用户的输入。

void loop() {
  client1 = server.available();  
  if (client1) {    
      Serial.println("New Client.");    
      boolean currentLineIsBlank = true;
        while (client1.connected()) {      
            if (client1.available()) {        
            char c = client1.read();        
            json_String += c;
            if (c == '\n' && currentLineIsBlank) 
            {          
                dataStr = json_String.substring(0, 4);
                Serial.println(dataStr);
                  if (dataStr == "GET ") 
                      {            
                          client1.print(html_page);          
                      } else if (dataStr == "POST") 
                      {            
                          json_String = "";            
                          while (client1.available()) 
                          {              
                              json_String += (char)client1.read();
                          }            
                          Serial.println(json_String);
                          dataStart = json_String.indexOf("chatgpttext=") + strlen("chatgpttext=");
                          chatgpt_Q = json_String.substring(dataStart, json_String.length());
                          Serial.println("User Question: " + chatgpt_Q);
                          client1.print(html_page);
                           delay(10);
                           client1.stop();          
                       }
                          json_String = "";          
                          break;        
           }
                   if (c == '\n') 
                 {
                      currentLineIsBlank = true;        
                  } else if (c != '\r') 
                          { 
                           currentLineIsBlank = false;        
                           }     
                }   
           }  
     }
}

这个插入代码的功能不是很好用,我已经尽力的格式化了。

此时将程序烧录到开发板中之后,我们访问ESP32C3-XIAO的地址即可获取到这个WEB页面。

image.png

同时当用户在页面的Input中输入数据后,开发板也可以正确的获取到用户的输入。

image.png

到这里,网页的部署完成了。 那么在下一个章节中,我将演示如何将这个开发板接入到ChatGPT来实现问答。


参考链接:https://wiki.seeedstudio.com/xiaoesp32c3-chatgpt/#configure-the-xiao-esp32c3-to-connect-to-the-network


附件

WebServer.zip


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]