嵌入式外设 -- ESP32-CAM(局域图传+STM32通信)

目录

前言

一、环境配置

Arduino IDE

PlatformIO IDE

二、资料获取

关注微信公众号--星之援工作室 发送关键字(ESP32-CAM)

 资料说明​编辑

三、代码展示

选择开发芯片

编译通过

上传代码

四、相关项目与资料


前言

这里就是介绍一下我使用ESP32-CAN的使用心得,并且附带使用流程,环境搭建以及代码供大家使用和查看,希望对大家有所帮助咯~~

一、环境配置

我们开发的每款芯片都离不开环境的配置,工欲善其事,必先利其器啦,这里我介绍使用两种方式去开发我们的ESP32系列

Arduino IDE

Arduino的环境我之前有提到和配置过,这里我就直接附上连接,安装教程配置即可

Arduino IDE 使用安装以及ESP32库的导入(离线)icon-default.png?t=N7T8https://blog.csdn.net/herui_2/article/details/135296814?spm=1001.2014.3001.5501

PlatformIO IDE

PlatformIO IDE是使用到了 VScode 的插件功能,首先我们需要去下载 VScode的编译器,然后使用他的插件功能去下载

可以参考下面教程

VSCode 使用 Keil5 插件推荐 附带Keil5安装教程icon-default.png?t=N7T8https://blog.csdn.net/herui_2/article/details/135296814?spm=1001.2014.3001.5501

如图,搜索 PlatformIO 点击VScode的插件部分即可

 安装完成界面

二、资料获取

关注微信公众号--星之援工作室 发送关键字(ESP32-CAM)

➡️🫡🫡🫡🫡🫡🫡🫡🫡➡️

 资料说明

 Arduino和PlatformIO使用到的代码是一致的,只是打开的方式不同,命名及为项目

三、代码展示

接下来以Arduino为例演示,使用到了一些外部配置文件,都放到了我们的项目文件夹下了

选择开发芯片

编译通过

上传代码

首先需要进入下载模式

 选择好连接的端口以后直接上传即可

 

 本代码涵盖了视频流数据以及串口转发,可以直接与STM32进行通信

#include "esp_camera.h"
#include <WiFi.h>

// Select camera model
// #define CAMERA_MODEL_WROVER_KIT
// #define CAMERA_MODEL_ESP_EYE
// #define CAMERA_MODEL_M5STACK_PSRAM
// #define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER

#include "camera_pins.h"

const char *ssid = "WIFI_For";
const char *password = "12345678";
const IPAddress ip(192, 168, 4, 1);
const IPAddress gateway(192, 168, 4, 1);
const IPAddress subnet(255, 255, 255, 0);

void cameraBegin();      // 相机初始化
int startCameraServer(); // 启动相机服务
void setWifi();
WiFiServer server(8000); // 申明AP对象

void setup()
{
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println("开机");
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH); // 闪光灯
  cameraBegin();
  setWifi();                      // 设置wifi
  int prot = startCameraServer(); // 开启相机服务并得到服务端口
  IPAddress myAddress = WiFi.localIP();
  Serial.println(myAddress);
  Serial.print("请在浏览器中输入:");
  Serial.print(WiFi.softAPIP());
  delay(1000);
  digitalWrite(4, LOW); // 闪光灯
}

void loop()
{
  String msgs = "", onDeng = "";
  WiFiClient client = server.available();
  boolean receiveFlag = false; // 是否接到消息标志位
  if (client)
  {
    while (client.connected())
    {
      while (Serial.available() > 0)
      {
        char c = Serial.read();
        receiveFlag = true; // 接到来自小车的串口消息
        msgs += c;
      }

      while (client.available() > 0)
      {
        char c = client.read();
        Serial.write(c); // 向串口发送消息
        onDeng += c;
      }

      if (onDeng == "DENG_ON")
      {
        digitalWrite(4, HIGH); // 闪光灯
      }
      else if (onDeng == "DENG_OFF")
      {
        digitalWrite(4, LOW); // 闪光灯
      }
      if (receiveFlag)
      {
        receiveFlag = false;
        client.write(&msgs[0]); // 向客户端发送消息
        msgs = "";
      }
      onDeng = "";
    }
    client.stop();
  }
  else
    delay(500);
}

/**
 * @brief 配置wifi
 */
void setWifi()
{
  WiFi.mode(WIFI_AP);                     // 设置wifi模
  WiFi.softAPConfig(ip, gateway, subnet); // 配置网络信息
  WiFi.softAP(ssid, password);            // 配置wifi名称及密码
  Serial.println("开启网络....等待连接.....");
  delay(500);
  server.begin();
  delay(500);
}
/**
 * @brief 相机初始化
 *
 */
void cameraBegin()
{
  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  // 用高规格初始化来预分配更大的缓冲区
  if (psramFound())
  {
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  }
  else
  {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  // 相机初始化
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK)
  {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

  sensor_t *s = esp_camera_sensor_get();
  // 最初的传感器垂直翻转,颜色有点饱和
  if (s->id.PID == OV3660_PID)
  {
    s->set_vflip(s, 0);       // 反转
    s->set_brightness(s, 1);  // 将暗处调高
    s->set_saturation(s, -2); // 降低饱和度
  }
  // drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif
}

四、相关项目与资料

一篇文章足够你学习ESP32,提供史上最全的ESP32教程icon-default.png?t=N7T8https://blog.csdn.net/XiaoXiaoPengBo/article/details/123952643?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170718720216800182123332%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170718720216800182123332&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~top_positive~default-2-123952643-null-null.nonecase&utm_term=ESP32&spm=1018.2226.3001.4450

物联网毕设 -- 图像小车(局域网+环境检测+GPS)icon-default.png?t=N7T8https://blog.csdn.net/herui_2/article/details/135073514物联网毕设 -- 养殖场的智能环境监测(STM32+WiFi+局域图传)icon-default.png?t=N7T8https://blog.csdn.net/herui_2/article/details/135671916?spm=1001.2014.3001.5501

  • 36
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: STM32F-J1939 CAN通信协议是一种适用于物联网设备的协议,该协议是基于CAN总线实现的。其主要应用于移动设备与汽车之间的通信,旨在提高通信效率和可靠性。 该协议使用标准的J1939协议,并通过STM32F系列单片机实现CAN总线通信。通过该协议,不仅能够实现数据的高速传输,还能够保证数据的完整性和准确性。 当使用STM32F-J1939 CAN通信协议时,需要注意的是必须按照协议要求设置CAN节点地址、数据帧格式等参数才能正常使用。此外,在实际应用中还需要进行一些必要的调试和测试工作,以确保数据传输的可靠性和稳定性。 总之,STM32F-J1939 CAN通信协议是一种可靠高效的通信协议,其在物联网和汽车领域具有广泛应用价值,未来会有更多厂商将其应用于各种智能设备和系统中。 ### 回答2: STM32F-J1939是一种嵌入式系统模块,支持CAN通信协议。CAN(Controller Area Network控制器局域网)是一种用于高速数据传输和实时控制的通信协议。它最初是为汽车行业开发的,但现在已广泛应用于许多不同的应用程序领域。 STM32F-J1939模块是在STM32系列微控制器上实现的,它配备了可编程的CAN控制器,可以很好地支持CAN通信标准。这意味着模块已经具备了CAN通信所需的硬件资源并且通过软件可以进行配置和控制。 J1939是一种基于CAN通信协议的高层协议,最初用于商用车辆和重型机械设备中。这种协议定义了一组通用的信号类型和数据格式,用于在车辆和机器之间传递信息。STM32F-J1939模块可以很好地支持这种高层协议,并且可以通过J1939协议指定和处理消息。 总结来说,STM32F-J1939模块通过CAN通信协议和J1939高层协议,使嵌入式系统在车辆和机械设备中实现快速、可靠的数据传输和实时控制。同时,它也为开发人员提供了方便的软件配置和控制接口。 ### 回答3: STM32F-J1939是一种可以实现CAN通信协议的芯片。J1939通信协议被广泛应用于重型商用车辆和机械设备的网络通信中,因为它具有高效稳定、安全可靠、数据传输速度快等优点。这种协议的实现需要支持CAN通信的硬件和软件,并需要作者根据实际需求进行编程。 利用STM32F-J1939芯片实现CAN通信协议非常方便,可以实现广泛的应用场景,例如汽车和设备之间的数据传输、监控、诊断等。同时,通过使用CAN通信协议,可以避免数据传输中的干扰和信号丢失等问题,从而提高了通信的稳定性和可靠性。 总之,STM32F-J1939芯片的CAN通信协议实现将为重型商用车辆和机械设备带来更高效、更安全的通信方式,这种协议具有广泛的应用前景和市场前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿柒学起来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值