ESP-WROOM-32配置Arduino IDE开发环境

news2024/12/24 9:17:01

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、下载Arduino IDE
  • 二、安装工具集
  • 三、测试样例
    • 1.选则开发板
    • 2.连接开发板
    • 3.示例程序
  • 四、使用官方示例程序
  • 总结


前言

之前用了很多注入STM32、树莓派Pico和Arduino nano等板子,但是都不带Wifi和蓝牙功能。蓝牙我用的不多,倒是开发的程序中网络程序蛮多的,所以就购买了一个。经过一下午的琢磨终于把功能跑通了。

我买的板子有两个版本ESP32-WROOM-32D和ESP32-WROOM-32U,32U比32D多一个天线插槽。

在这里插入图片描述


一、下载Arduino IDE

应该来说Arduino IDE是一个相当易用的IDE了,支持的MCU也多,个人觉得如果你习惯使用C开发那么Arduino IDE无疑更适合你。如果你是Python开发者,那么Thonny也是可以的。

Arduino IDE还有一个非常好的功能,那就是它为很多MCU都提供了示例程序,对新手非常友好,一会教你怎么使用。

官方下载链接

选择适合自己系统的版本:
在这里插入图片描述

安装就不多说了,很简单。

二、安装工具集

打开Arduino IDE并在侧边栏找到开发板管理器,在搜索框输入esp32并选择跟我一样的选项并点击安装,会有点慢,耐心等待完成。
在这里插入图片描述

三、测试样例

这里直接就以WIFI为例了,确保你和我的板子是同一块板子。

1.选则开发板

首先在工具里面找到开发板选项:
在这里插入图片描述
展开并找到ESP32 Dev Module:
在这里插入图片描述

注意:千万型号别选错!

2.连接开发板

找一根USB数据线,一头是USB-A,另一头是Micro-USB的将开发板接到电脑上。这里默认你已经安装了串口驱动了。如果你成功了,你和我的配置应该是一样的。

开发板型号:

在这里插入图片描述

串口连接状态:

在这里插入图片描述

注意:你的串口不一定是COM8,实际的串口和你的系统有关系,总之能连接就对了,打感叹号就是硬件不识别,检查下是不是驱动没装好。

3.示例程序

创建一个新项目将下面的代码复制到新项目中:

注意:一定要2.4G,这个板子不支持5G的无线网!

/*
    Go to thingspeak.com and create an account if you don't have one already.
    After logging in, click on the "New Channel" button to create a new channel for your data. This is where your data will be stored and displayed.
    Fill in the Name, Description, and other fields for your channel as desired, then click the "Save Channel" button.
    Take note of the "Write API Key" located in the "API keys" tab, this is the key you will use to send data to your channel.
    Replace the channelID from tab "Channel Settings" and privateKey with "Read API Keys" from "API Keys" tab.
    Replace the host variable with the thingspeak server hostname "api.thingspeak.com"
    Upload the sketch to your ESP32 board and make sure that the board is connected to the internet. The ESP32 should now send data to your Thingspeak channel at the intervals specified by the loop function.
    Go to the channel view page on thingspeak and check the "Field1" for the new incoming data.
    You can use the data visualization and analysis tools provided by Thingspeak to display and process your data in various ways.
    Please note, that Thingspeak accepts only integer values.

    You can later check the values at https://thingspeak.com/channels/2005329
    Please note that this public channel can be accessed by anyone and it is possible that more people will write their values.
 */

#include <WiFi.h>

const char* ssid     = "这里改成你的无线网名称"; // Change this to your WiFi SSID
const char* password = "这里改成你的无线网密码"; // Change this to your WiFi password

const char* host = "api.thingspeak.com"; // This should not be changed
const int httpPort = 80; // This should not be changed
const String channelID   = "2005329"; // Change this to your channel ID
const String writeApiKey = "V6YOTILH9I7D51F9"; // Change this to your Write API key
const String readApiKey = "34W6LGLIFXD56MPM"; // Change this to your Read API key

// The default example accepts one data filed named "field1"
// For your own server you can ofcourse create more of them.
int field1 = 0;

int numberOfResults = 3; // Number of results to be read
int fieldNumber = 1; // Field number which will be read out

void setup()
{
    Serial.begin(115200);
    while(!Serial){delay(100);}

    // We start by connecting to a WiFi network

    Serial.println();
    Serial.println("******************************************************");
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

void readResponse(WiFiClient *client){
  unsigned long timeout = millis();
  while(client->available() == 0){
    if(millis() - timeout > 5000){
      Serial.println(">>> Client Timeout !");
      client->stop();
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  while(client->available()) {
    String line = client->readStringUntil('\r');
    Serial.print(line);
  }

  Serial.printf("\nClosing connection\n\n");
}

void loop(){
  WiFiClient client;
  String footer = String(" HTTP/1.1\r\n") + "Host: " + String(host) + "\r\n" + "Connection: close\r\n\r\n";

  // WRITE --------------------------------------------------------------------------------------------
  if (!client.connect(host, httpPort)) {
    return;
  }

  client.print("GET /update?api_key=" + writeApiKey + "&field1=" + field1 + footer);
  readResponse(&client);

  // READ --------------------------------------------------------------------------------------------

  String readRequest = "GET /channels/" + channelID + "/fields/" + fieldNumber + ".json?results=" + numberOfResults + " HTTP/1.1\r\n" +
                       "Host: " + host + "\r\n" +
                       "Connection: close\r\n\r\n";

  if (!client.connect(host, httpPort)) {
    return;
  }

  client.print(readRequest);
  readResponse(&client);

  // -------------------------------------------------------------------------------------------------

  ++field1;
  delay(10000);
}

编译并上传代码,设备会自动重启并执行代码。成功了就是下面的样子:

Status: 200 OK
Cache-Control: max-age=7, private
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 1800
X-Request-Id: 9e90e7b7-8612-499e-a179-3e1bfcde272c
Access-Control-Allow-Headers: origin, content-type, X-Requested-With
Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS, DELETE, PATCH
ETag: W/"1fdaff80268c18103424af2182ddf550"
X-Frame-Options: SAMEORIGIN

1e9
{"channel":{"id":2005329,"name":"WiFiCLient example","description":"Default setup for Arduino ESP32 WiFiClient example","latitude":"0.0","longitude":"0.0","field1":"data0","created_at":"2023-01-11T15:56:08Z","updated_at":"2023-01-13T08:13:58Z","last_entry_id":891510},"feeds":[{"created_at":"2024-05-09T13:32:01Z","entry_id":891508,"field1":"50"},{"created_at":"2024-05-09T13:32:22Z","entry_id":891509,"field1":"635"},{"created_at":"2024-05-09T13:32:41Z","entry_id":891510,"field1":"53"}]}
0


Closing connection

注:这款设备带内置天线,不用额外装天线,但是也不要遮挡信号,尽量选空旷的地方!。

如果你的串口输出的是乱码就把波特率改成115200,我这块板子是115200。

四、使用官方示例程序

实话实说Arduino IDE和Thonny半斤八两,像一个半成品,比起Clion那样的程序就太小儿科了。但是架不住人家有示例程序,这点就很方便,对新手可以说太友好了!

首先选则你要在哪个开发板上开发,上面已经教过了,这一步很重要,因为Arduino IDE几乎为所有支持的开发板都准备了示例程序,而且每个开发板都是不一样的。

打开工具栏上的文件选项卡,找到示例,这里介绍下内置示例和ESP32 Dev Module示例的区别:内置示例是IDE内置的,几乎所有的开发板代码都是差不多的,但是内置示例不是所有的开发板都一定可以运行!而配套示例就是和我们开发板相关的示例了,我试了下很多是可以运行的,应该来说都能运行。

在这里插入图片描述

注意:有些示例可以直接运行,比如我发的WIFI示例,无线网卡是内置的,还有些需要外设配和,比如摄像头等等!


总结

1、蛮简单的,不过比树莓派Pico略微复杂
2、除了Arduino IDE可以开发,Clion(基于Arduino框架)也可以开发还有Thonny等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1658178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

车载测试系列:车载测试流程

车载测试流程是保证软件质量的重要支撑&#xff0c;优秀的团队都必须拥有规范的流程体系支撑&#xff0c;它能够约束测试人员的测试行为&#xff0c;约束测试环境的测试精度&#xff0c;提升测试的覆盖度&#xff0c;保证团队成员工作的协调性。 该测试流程建立的依据&#xf…

三.Django--ORM(操作数据库)

目录 1 什么是ORM 1.1 ORM优势 1.2ORM 劣势 1.3 ORM与数据库的关系 2 ORM 2.1 作用 2.2 连接数据库 2.3 表操作--设置字段 2.4 数据库的迁移 写路由增删改查操作 项目里的urls.py: app里的views.py: 注意点: 1 什么是ORM ORM中文---对象-关系映射 在MTV,MVC设计…

每日Attention学习3——Cross-level Feature Fusion

模块出处 [link] [code] [PR 23] Cross-level Feature Aggregation Network for Polyp Segmentation 模块名称 Cross-level Feature Fusion (CFF) 模块作用 双级特征融合 模块结构 模块代码 import torch import torch.nn as nnclass BasicConv2d(nn.Module):def __init__(…

day1_slidingWindow

一、滑动窗口模板 // 注意&#xff1a;java 代码由 chatGPT&#x1f916; 根据我的 cpp 代码翻译&#xff0c;旨在帮助不同背景的读者理解算法逻辑。 // 本代码不保证正确性&#xff0c;仅供参考。如有疑惑&#xff0c;可以参照我写的 cpp 代码对比查看。import java.util.Has…

Mac YOLO V9推理测试

环境&#xff1a; Mac M1 (MacOS Sonoma 14.3.1) Python 3.11PyTorch 2.1.2 一、准备工作 工程及模型下载&#xff1a;​​​​​​​https://github.com/WongKinYiu/yolov9 git clone https://github.com/WongKinYiu/yolov9.git 克隆后安装相关依赖&#xff08;没啥依赖好装…

轮廓提取、矩形标记时,点的位置需要重标

在下图中的0&#xff0c;3&#xff0c;1&#xff0c;2位置如何变换成0&#xff0c;1&#xff0c;2&#xff0c;3 先显示结果&#xff1a; 变换之后图&#xff1a; 这边提供两种解决方案&#xff1a; 第一种&#xff1a;将坐标值相加求和&#xff0c;采用冒泡排序实现从小到大…

基于51单片机可调幅度频率波形信号发生器

基于51单片机可调幅度频率信号发生器( proteus仿真程序原理图报告讲解视频&#xff09; 1.主要功能&#xff1a; 基于51单片机的三角波信号发生器 1、幅值在0-5V可以通过按键调整&#xff0c;频率在0-50Hz,可以通过按键调整 2、通过LCD1602显示幅值和频率 3、使用示波器查…

postman介绍、安装、使用、功能特点、注意事项

Postman是一款流行的API开发工具&#xff0c;它提供了丰富的功能&#xff0c;包括创建、测试、调试和文档化API。本文将介绍Postman的安装、使用方法&#xff0c;以及其功能特点和注意事项。 1. 介绍 Postman是一款用于构建、测试和调试API的工具&#xff0c;它提供了用户友好的…

2. Linux 基本指令(上)|ls|pwd|cd|tree|touch|mkdir|rmdir|rm

前言 计算机软硬件体系结构 层状结构应用软件Word&#xff0c;Matlab操作系统Windows&#xff0c;Linux设备驱动声卡驱动硬件CPU&#xff0c;内存&#xff0c;磁盘&#xff0c;显示器&#xff0c;键盘 操作系统概念 操作系统 是一款进行软硬件资源管理的软件 例子 比如在学…

Q1保健品线上市场分析(三):牛初乳市场扩张,同比去年增长54%

近几年&#xff0c;牛初乳在多项科学研究支撑下&#xff0c;其卓越的“肠道免疫力”正得到越来越多的挖掘、验证和商业化尝试。因此&#xff0c;随着人们对健康饮食的重视&#xff0c;牛初乳产品的需求量也在逐年增加&#xff0c;市场潜力巨大。 根据鲸参谋数据显示&#xff0…

AI 资料汇总专栏

包含AI资料、大模型资料、AI最新行业发展 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门研究如何使计算机能够具备智能行为的科学与技术。它致力于开发出能够像人类一样思考、学习、理解和决策的计算机系统。自20世纪50年代以来&#xff…

C语言leetcode刷题笔记2

C语言leetcode刷题笔记2 第4题&#xff1a;283.移动零互换直接移动 第5题&#xff1a;122.买卖股票的最佳时机‖递归&#xff08;超时&#xff09;动态规划贪心算法 第6题&#xff1a;49.字母异位词分组优化 第4题&#xff1a;283.移动零 给定一个数组 nums&#xff0c;编写一…

100G ZR4 80KM光模块产品亮点有哪些

之前的文章我们介绍了100G ZR4 80KM光模块的产品特征以及技术原理等&#xff0c;那本期文章我们来了解一下易天第二代100G ZR4 80KM光模块的产品亮点。 首先我们通过下面这张表格以最直观的方式来了解第一代和第二代100G ZR4 80KM光模块在工作温度、功耗、FEC纠错等方面有哪些…

哪个可以下载视频素材?哪里有视频素材网站啊?

在这个视频内容日益重要的世界里&#xff0c;选择正确的可商用素材网站可以极大提升您的项目质量。下面是另一批国内外知名的视频素材网站&#xff0c;希望能为您的创作提供新的灵感。 1. 蛙学府 提供广泛的创意资产&#xff0c;包括高分辨率的视频素材。订阅后用户可无限次下…

VIsualGDB : 快速入门系列

《VisualGDB &#xff1a; 解决编码导致的编译错误》 《VisualGDB &#xff1a; 在windows上开发和调试Linux代码&#xff08;一&#xff09;》 《VisualGDB&#xff1a;为Linux项目添加系统依赖库》 《VisualGDB&#xff1a;Linux动态库项目创建、编译及库的使用》 《VisualGD…

点击导航栏选项后,导航栏高亮该选项

如图所示&#xff0c;点击“流浪猫客栈”时&#xff0c;会一直高亮显示&#xff0c;表示现在看的是这个选项的页面。 Cat.jsp上写&#xff1a; <!--header--> <jsp:include page"header.jsp"><jsp:param name"flag" value"3">…

中国科技大航海时代,“掘金”一带一路

文&#xff5c;白 鸽 编&#xff5c;王一粟 “这不就是90年代的内地吗&#xff1f;” 在深度考察完沙特市场后&#xff0c;华盛集团联合创始人兼CEO张霆对镜相工作室感慨道。 在张霆看来&#xff0c;沙特落后的基建&#xff08;意味着大量创新空间&#xff09;、刚刚开放…

邮件系统国产化,保障企业信息安全的重要举措

随着信息技术日益发展和成熟&#xff0c;企业信息化建设深入推进&#xff0c;企业信息化管理能力大幅提升&#xff0c;其中邮件系统在企业信息化建设中扮演着至关重要的角色。然而&#xff0c;长期以来&#xff0c;我国企业在邮件系统方面主要依赖于国外的产品&#xff0c;这不…

【Linux系统】进程控制

再次理解进程 进程&#xff1a;内核的相关管理数据结构(task_struct(进程控制块PCB)&#xff0c;mm_struct(地址空间)&#xff0c;页表) 代码和数据 那么如何理解进程具有独立性&#xff1f; 我们之前已经学习过进程控制块啊&#xff0c;地址空间啊&#xff0c;页表啊&…

Linux-笔记 修改开发板默认时区

1. 时区文件 使用命令date -R查看当前的默认时区&#xff0c;date - R命令会自动解析/etc/localtime 文件&#xff0c;而该文件又是指向“ /usr/share/zoneinfo/$主时区/$次时区 ”&#xff0c;当需要更改到指定的时区只要将/etc/localtime 文件软链接到 ”/usr/share/zoneinf…