使用 ESP32-CAM 构建 Wi-Fi 遥控汽车机器人。您将能够使用Web服务器控制机器人,该服务器显示机器人"看到"的视频流。您可以远程控制您的机器人,即使它不在你的视线范围内。ESP32-CAM 将使用 Arduino IDE 进行编程。

电路板兼容性:此项目需要 4 个 GPIO 来控制直流电机。因此,您可以使用任何带有 4 个可用 GPIO 的 ESP32 相机板,如 ESP32-CAM Ai-Thinker

项目概况

在开始项目之前,我们将重点介绍用于构建机器人的最重要功能和组件。

无线网络

机器人将使用您的 ESP32-CAM 通过 Wi-Fi 进行控制。我们将创建一个基于Web的界面来控制机器人,可以在本地网络内的任何设备中访问。

该网页还显示了机器人"看到"的视频流。为了获得良好的视频流效果,我们建议使用带外部天线。

机器人控制

Web 服务器有 5 个控件:"前进"、"向后"、"向左"、"向右""停止"

只要您按下按钮,机器人就会移动。当您松开任何按钮时,机器人就会停止。但是,我们包含了"停止"按钮,如果您释放按钮时 ESP32 未收到停止命令,该按钮非常有用。

智能机器人底盘套件

我们将使用智能机器人底盘套件。您可以在大多数在线商店中找到它。该套件的价格约为10美元,并且易于组装 - 观看此视频,了解如何组装机器人底盘套件。

您可以使用任何其他机箱套件,只要它带有两个直流电机即可。

L298N 电机驱动器

控制直流电机的方法有很多种。我们将使用L298N电机驱动器,它提供了一种简单的方法来控制2个直流电机的速度和方向。

为了保持电路简单,我们将使用相同的电源为机器人(电机)和 ESP32 供电。我们使用了移动电源/便携式充电器(就像用于为智能手机充电的充电器一样),效果很好。

注意:电机消耗大量电流,因此,如果您觉得机器人无法正常移动,则可能需要为电机使用外部电源。这意味着您需要两种不同的电源。一个用于为直流电机供电,另一个用于为 ESP32 供电。

部件
对于此项目,我们将使用以下部分:

ESP32-CAM AI-Thinker(安信可原装性能有保障),价格较贵,不带外置天线

ESP32-CAM模块带外置天线,第三方,较实惠
L298N 电机驱动器
机器人汽车底盘套件
移动电源或其他5V电源

锂电池充电板
原型电路板(洞洞板,排针)

代码下载:https://gitee.com/jun-tian/esp32-cam-wi-fi-car

#include "esp_camera.h"
#include <WiFi.h>
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "soc/soc.h"             // disable brownout problems
#include "soc/rtc_cntl_reg.h"    // disable brownout problems
#include "esp_http_server.h"// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";//修改为你的wifi名称
const char* password = "REPLACE_WITH_YOUR_PASSWORD";//修改为你的WiFi密码#define PART_BOUNDARY "123456789000000000000987654321"#define CAMERA_MODEL_AI_THINKER
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM_B
//#define CAMERA_MODEL_WROVER_KIT#if defined(CAMERA_MODEL_WROVER_KIT)#define PWDN_GPIO_NUM    -1#define RESET_GPIO_NUM   -1#define XCLK_GPIO_NUM    21#define SIOD_GPIO_NUM    26#define SIOC_GPIO_NUM    27#define Y9_GPIO_NUM      35#define Y8_GPIO_NUM      34#define Y7_GPIO_NUM      39#define Y6_GPIO_NUM      36#define Y5_GPIO_NUM      19#define Y4_GPIO_NUM      18#define Y3_GPIO_NUM       5#define Y2_GPIO_NUM       4#define VSYNC_GPIO_NUM   25#define HREF_GPIO_NUM    23#define PCLK_GPIO_NUM    22#elif defined(CAMERA_MODEL_M5STACK_PSRAM)#define PWDN_GPIO_NUM     -1#define RESET_GPIO_NUM    15#define XCLK_GPIO_NUM     27#define SIOD_GPIO_NUM     25#define SIOC_GPIO_NUM     23#define Y9_GPIO_NUM       19#define Y8_GPIO_NUM       36#define Y7_GPIO_NUM       18#define Y6_GPIO_NUM       39#define Y5_GPIO_NUM        5#define Y4_GPIO_NUM       34#define Y3_GPIO_NUM       35#define Y2_GPIO_NUM       32#define VSYNC_GPIO_NUM    22#define HREF_GPIO_NUM     26#define PCLK_GPIO_NUM     21#elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM)#define PWDN_GPIO_NUM     -1#define RESET_GPIO_NUM    15#define XCLK_GPIO_NUM     27#define SIOD_GPIO_NUM     25#define SIOC_GPIO_NUM     23#define Y9_GPIO_NUM       19#define Y8_GPIO_NUM       36#define Y7_GPIO_NUM       18#define Y6_GPIO_NUM       39#define Y5_GPIO_NUM        5#define Y4_GPIO_NUM       34#define Y3_GPIO_NUM       35#define Y2_GPIO_NUM       17#define VSYNC_GPIO_NUM    22#define HREF_GPIO_NUM     26#define PCLK_GPIO_NUM     21#elif defined(CAMERA_MODEL_AI_THINKER)#define PWDN_GPIO_NUM     32#define RESET_GPIO_NUM    -1#define XCLK_GPIO_NUM      0#define SIOD_GPIO_NUM     26#define SIOC_GPIO_NUM     27#define Y9_GPIO_NUM       35#define Y8_GPIO_NUM       34#define Y7_GPIO_NUM       39#define Y6_GPIO_NUM       36#define Y5_GPIO_NUM       21#define Y4_GPIO_NUM       19#define Y3_GPIO_NUM       18#define Y2_GPIO_NUM        5#define VSYNC_GPIO_NUM    25#define HREF_GPIO_NUM     23#define PCLK_GPIO_NUM     22#elif defined(CAMERA_MODEL_M5STACK_PSRAM_B)#define PWDN_GPIO_NUM     -1#define RESET_GPIO_NUM    15#define XCLK_GPIO_NUM     27#define SIOD_GPIO_NUM     22#define SIOC_GPIO_NUM     23#define Y9_GPIO_NUM       19#define Y8_GPIO_NUM       36#define Y7_GPIO_NUM       18#define Y6_GPIO_NUM       39#define Y5_GPIO_NUM        5#define Y4_GPIO_NUM       34#define Y3_GPIO_NUM       35#define Y2_GPIO_NUM       32#define VSYNC_GPIO_NUM    25#define HREF_GPIO_NUM     26#define PCLK_GPIO_NUM     21#else#error "Camera model not selected"
#endif#define MOTOR_1_PIN_1    14
#define MOTOR_1_PIN_2    15
#define MOTOR_2_PIN_1    13
#define MOTOR_2_PIN_2    12static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";httpd_handle_t camera_httpd = NULL;
httpd_handle_t stream_httpd = NULL;

插入您的网络凭据,代码应该立即工作。

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

代码的工作原理

让我们来看看控制机器人的相关部件。定义将控制电机的 GPIO。每个电机由两个引脚控制。

#define MOTOR_1_PIN_1 14
#define MOTOR_1_PIN_2 15
#define MOTOR_2_PIN_1 13
#define MOTOR_2_PIN_2 12

单击这些按钮时,将在其他 URL 上发出请求。

<table><tr><td colspan="3" align="center"><button class="button" onmousedown="toggleCheckbox('forward');" ontouchstart="toggleCheckbox('forward');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Forward</button></td></tr><tr><td align="center"><button class="button" onmousedown="toggleCheckbox('left');" ontouchstart="toggleCheckbox('left');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Left</button></td><td align="center"><button class="button" onmousedown="toggleCheckbox('stop');" ontouchstart="toggleCheckbox('stop');">Stop</button></td><td align="center"><button class="button" onmousedown="toggleCheckbox('right');" ontouchstart="toggleCheckbox('right');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Right</button></td></tr><tr><td colspan="3" align="center"><button class="button" onmousedown="toggleCheckbox('backward');" ontouchstart="toggleCheckbox('backward');" onmouseup="toggleCheckbox('stop');" ontouchend="toggleCheckbox('stop');">Backward</button></td></tr>
</table>
<script>function toggleCheckbox(x) {var xhr = new XMLHttpRequest();xhr.open("GET", "/action?go=" + x, true);xhr.send();}window.onload = document.getElementById("photo").src =     window.location.href.slice(0, -1) + ":81/stream";
</script>

以下是根据所按下的按钮发出的请求:

向前:

<ESP_IP_ADDRESS>/action?go=forward

向后:

/action?go=backward

左:

/action?go=left

右:

/action?go=right

停:

/action?go=stop

当您松开按钮时,将在/action?go=stop网址。机器人只有在您按下按钮时才会移动。

处理请求

为了处理当我们收到对这些URL的请求时发生的情况,我们使用这些如果...其他语句:

<span style="background-color:#f5f2f0"><span style="color:#000000"><code class="language-c"><span style="color:#0077aa">if</span><span style="color:#999999">(</span><span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">!</span></span><span style="color:#dd4a68">strcmp</span><span style="color:#999999">(</span>variable<span style="color:#999999">,</span> <span style="color:#669900">"forward"</span><span style="color:#999999">)</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>Serial<span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Forward"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">1</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">1</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#999999">}</span><span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span><span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">!</span></span><span style="color:#dd4a68">strcmp</span><span style="color:#999999">(</span>variable<span style="color:#999999">,</span> <span style="color:#669900">"left"</span><span style="color:#999999">)</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>Serial<span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Left"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">1</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">1</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span><span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">!</span></span><span style="color:#dd4a68">strcmp</span><span style="color:#999999">(</span>variable<span style="color:#999999">,</span> <span style="color:#669900">"right"</span><span style="color:#999999">)</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>Serial<span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Right"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">1</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">1</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span><span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">!</span></span><span style="color:#dd4a68">strcmp</span><span style="color:#999999">(</span>variable<span style="color:#999999">,</span> <span style="color:#669900">"backward"</span><span style="color:#999999">)</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>Serial<span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Backward"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">1</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">1</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#0077aa">else</span> <span style="color:#0077aa">if</span><span style="color:#999999">(</span><span style="background-color:rgba(255, 255, 255, 0.5)"><span style="color:#9a6e3a">!</span></span><span style="color:#dd4a68">strcmp</span><span style="color:#999999">(</span>variable<span style="color:#999999">,</span> <span style="color:#669900">"stop"</span><span style="color:#999999">)</span><span style="color:#999999">)</span> <span style="color:#999999">{</span>Serial<span style="color:#999999">.</span><span style="color:#dd4a68">println</span><span style="color:#999999">(</span><span style="color:#669900">"Stop"</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_1_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_1<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span><span style="color:#dd4a68">digitalWrite</span><span style="color:#999999">(</span>MOTOR_2_PIN_2<span style="color:#999999">,</span> <span style="color:#990055">0</span><span style="color:#999999">)</span><span style="color:#999999">;</span>
<span style="color:#999999">}</span></code></span></span>

测试代码

插入网络凭据后,您可以将代码上传到 ESP32-CAM 开发板。

上传后,打开串行监视器以获取其IP地址。

.

打开浏览器并键入 ESP IP 地址。类似的网页应加载:

按下按钮并查看串行监视器,以查看它是否正在流式传输而没有延迟,以及它是否正在接收命令而不会崩溃。

如果一切正常,是时候组装电路了。

电路

组装机器人底盘后,您可以按照下一个原理图连接电路。.

首先将 ESP32-CAM 连接到电机驱动器,如原理图所示。您可以使用迷你试验板或脱衣板来放置 ESP32-CAM 并构建电路。

下表显示了 ESP32-CAM 和 L298N 电机驱动器之间的连接。

L298N 电机驱动器 ESP32-凸轮
国家警察 GPIO 14
IN2 GPIO 15
高级护士 GPIO 13
IN4 GPIO 12

我们将所有连接组装在一个迷你条板上,如下所示。

之后,将每个电机连接到其接线端子。

注意:我们建议将0.1 uF陶瓷电容器焊接到每个电机的正极和负极,如图所示,以帮助平滑任何电压尖峰。此外,您可以将滑块开关焊接到来自移动电源的红线上。这样,您可以打开和关闭电源。

最后,使用移动电源供电,如图示意图所示。您需要剥离USB电缆。在这个例子中,ESP32-CAM和电机使用相同的电源供电,并且运行良好。

注意:电机消耗大量电流,因此,如果您觉得机器人的移动速度不够快,则可能需要为电机使用外部电源。这意味着您需要两种不同的电源。一个用于为直流电机供电,另一个用于为 ESP32 供电。您可以使用 4 AA 电池组为电机供电。当您获得机器人底盘套件时,您通常会获得一个用于4节AA电池的电池座。

您的机器人应类似于下图:

不要忘记,您应该将外部天线与 ESP32-CAM 配合使用,否则 Web 服务器可能会非常慢。

示范

在 ESP32-CAM IP 地址上打开浏览器,您应该能够控制您的机器人。Web服务器在笔记本电脑或智能手机上运行良好。

您一次只能在一个设备/选项卡中打开Web服务器。

结束语

在本教程中,您学习了如何使用 ESP32-CAM 构建遥控机器人,以及如何使用 Web 服务器对其进行控制。

使用 ESP32-CAM 控制直流电机与使用"常规"ESP32 控制直流电机相同。

如果要在本地网络范围之外控制机器人,可以考虑将 ESP32-CAM 设置为接入点。这样,ESP32-CAM 就不需要连接到您的路由器,它会创建自己的 Wi-Fi 网络,附近的 Wi-Fi 设备(如智能手机)可以连接到它。

0代码,不用app Arduino esp32cam 远程控制Web Server视频小车相关推荐

  1. ESP8266从点灯到遥控小车(三)——组装小车,0代码开发APP控制小车

    ESP8266从点灯到APP遥控小车(三)--组装小车,0代码开发APP控制小车 文章目录 ESP8266从点灯到APP遥控小车(三)--组装小车,0代码开发APP控制小车 所需组件 一.小车所需组件 ...

  2. arduino小车前进代码_基于Arduino操纵杆扩展板Funduino制作机器人小车

    在本篇文章中,我们将制作一款两轮遥控机器人小车,使用的组件包含nRF24L01模块.Arduino UNO和Funduino操纵杆扩展板组成的控制部分,Arduino nano开发板以及和一个用于控制 ...

  3. 0代码定制物联网远程控制APP——物联网平台ThingsCloud简单入门

    ThingsCloud与阿里云物联网平台类似,比较重要的特点是可以按照自己的设备实际情况和需求0代码定制APP,包括安卓.IOS以及微信小程序等,对需要做课程设计或者想浅尝远程控制的同学非常友好. 可 ...

  4. DICOM:剖析Orthanc中的Web Server,Mongoose之 Flag bit Event(三)

    背景: Orthanc是本专栏中介绍过的一款新型DICOM服务器,具有轻量级.支持REST的特性,可将任意运行Windows和Linux系统的计算机变成DICOM服务器,即miniPACS.Ortha ...

  5. 简单Android app开发_什么方法开发APP最简单?试试0代码开发平台

    开发APP有哪些方式? 说到开发APP,那肯定是找外包公司最方便,只用花钱就能坐等APP完成.但是,现在需要开发APP的公司范围越来越广,传统外包公司高昂的费用显然已经不能普罗大众,那么,有没有简单便 ...

  6. vc6开发一个抓包软件_开发一个软件多少钱?传统app开发与0代码app制作方法对比...

    开发一个软件多少钱?app开发难吗?app制作需要哪些流程? app开发很难:按照传统的开发方式需要最少5名以上的技术人员,团队配合花费3个月左右的时间才能搞定,成本20万以上. app开发也很简单: ...

  7. esp8266+arduino+blinker远程控制灯管和LED小灯,步骤详细,适用所有新手小白

    目录 1.准备工作 2.工作原理 3.接线+实现流程 4.如何修改自己的参数 1.准备工作 esp8266 NodeMCU开发板   x1 面包板   x1 arduino IDE开发环境 下载bli ...

  8. WIFI小车APP远程控制,无线智能小车之ESP8266例程

    WIFI小车无线远程控制,智能小车之ESP8266例程 第一.原理讲解 第二.小车改装 第三. ESP8266 例程代码 第四.WIFI配网 程序测试 第五.安卓app制作 第一.原理讲解 原理简述: ...

  9. 基于ESP32-CAM的图传探勘小车项目(代码开源)

    前言:本文为手把手教学ESP32-CAM实战项目--ESP32-CAM图传勘探小车,本项目仅采用ESP32-CAM作为核心MCU,实现小车项目的图传与控制一体化.图传小车的底盘驱动轮采用麦克纳姆轮,搭 ...

最新文章

  1. R语言ggplot2可视化分组的重叠图实战:grouped overlay plot
  2. S-D5舵机拆开看一看
  3. java nio 读取图片_给大忙人们看的 Java NIO 极简教程
  4. STM32 ISP 下载程序, C源码,
  5. 列表,元组,字典类的常见简单方法
  6. JavaScript中的内置对象-8--4.date对象中-获取,设置日期时间的方法; 获取,设置年月日时分秒及星期的方法;...
  7. Python笔记-U2控件操作和操作超时
  8. java 一切object_javaObject类
  9. Hibernate中createCriteria即QBC查询的详细用法
  10. ectouch微信登录提示此次操作失败请返回重试原因
  11. 叉积求点到平面距离_平面方程怎么求
  12. Mac安装虚拟机Parallels Desktop,以及Windows10系统详细教程
  13. 唐朝一体机屏幕显示变红
  14. Linux下运行jar包的方法
  15. python常胜将军问题_蓝奏云盘pc版(lanzou-gui)更新0.3.3
  16. 电信主机计费系统_数据采集子模块
  17. vue-amap实现实现初始化并定位当前位置,搜索,定位,增加点标记
  18. 给文本文件每一行加行号
  19. 刷机相关的Android的安全
  20. 什么是防火墙?防火墙的功能有哪些?

热门文章

  1. python用类名直接调用方法_一文读全 Python 的面向对象编程方法
  2. 面试官:RocketMQ是什么,它有什么特性与使用场景?
  3. Linux欧姆单位怎么打,万用表如何进行欧姆校零
  4. [AP]无线AP和无线路由的区别
  5. Android studio Your SDK location contains non-ASCII characters解决方法
  6. k8s 1.24 dashboard
  7. #730 (Div. 2) A 思维 C dfs D1 交互思维
  8. 百度超级链数字藏品 仿鲸探数字藏品平台开发
  9. 荣耀android手机怎么截图,华为荣耀畅玩5C怎么截图/截屏方法教程
  10. JavaScript原型详解(通俗易懂)