Arduino学习

news2024/11/28 6:42:39

物联网学习资料

《arduino程序设计基础》陈吕洲 北京航空航天大学出版社

半颗心脏博客导航一站式搜索(所有博客的汇总帖)

Ai-Thinker 安信可科技 github

半颗心脏 | 徐宏

蓝牙技术

蓝牙网关【【智能家居】入门攻略二!啥是网关?蓝牙、zigbee协议详解,原来区别这么大!-哔哩哔哩】

esp

8266有两种工作模式,分别是station模式以及ap模式,简单来说,station模式是连你家无线路由器的,ap模式是8266作为热点由手机去连接它(或者无线路由器)。如无意外,在家里使用都会用station模式

ESP8266串口wifi简介,通过http网页实现控制引脚

esp初学必看,简单示例

ESP8266型号对比

ESP8266 型号原理图汇总

ESP8266型号、下载、接线、烧录等怕忘总结

ESP8266和nodemcu是一种什么关系,ESP8266是什么

nodemcu上面用了一个ESP8266而已,其实质就是在ESP8266上面跑了一个LUA的解释器,ESP8266本身就支持二次开发的
esp8266是一个模块,modemcu是一个包含8266的控制模块

esp8266是芯片
esp8266芯片加上4MB spi flash变成esp-12模块
esp-12模块加上底板,加上USB转串口变成NodMCU

esp8266是一类wifi模块,包括esp-01,esp-01s,esp-12f等等

esp 的 mdns

在网络世界中,很难记住每个网站和计算机的IP地址,解决这个问题域名系统(DNS)用于制作人类可理解的名称。在ESP8266中使用ESP作为Web服务器时,很难记住ESP8266的IP地址,并且在DHCP模式下很难识别ESP的IP地址。即WiFi路由器为ESP8266分配IP地址大多数ESP8266应用程序没有显示界面,并且不容易访问以了解其IP地址。为了克服这个问题,使用mDNS。

mDNS 是一种组播 UDP 服务,用来提供本地网络服务和主机发现。
mdns 即多播dns(Multicast DNS),mDNS主要实现了在没有传统DNS服务器的
情况下使局域网内的主机实现相互发现和通信,使用的端口为5353,遵从dns协议,
使用现有的DNS信息结构、名语法和资源记录类型。

工作原理举例:
比如,A 主机进入局域网,开启了 mDNS 服务,并向A主机的 mDNS 服务注册以下信息:我提供 FTP 服务,我的 IP 是192.168.1.101,端口是 21。当 B 主机进入局域网,并向 B 主机的 mDNS 服务请求,我要找局域网内 FTP 服务器B主机的 mDNS 就会去局域网内向其他主机的 mDNS 询问(即多播),并且最终告诉你,有一个IP地址为 192.168.1.101,端口号是 21 的主机,也就是 A 主机提供 FTP 服务,所以 B 主机就知道了 A 主机的 IP 地址和端口号了

一种用于在本地网络 (LAN) 内解析域名的协议。
它可以用来代替传统的 DNS 服务器,以解析设备在局域网内的主机名与 IP 地址的对应关系。
mDNS 可以使用设备与设备之间的通讯更加方便和便捷,尤其在智能家居、物联网等应用中。

ESP32入门基础之mDNS服务

目的

通过 域名 而不是 ip 地址访问 esp
访问到 esp 之后,esp 就相当于一个终端,可以发送接口,查询baidu等网络功能
可以通过 webserver 重置网络配置
if (MDNS.begin("esp8266")) {
	Serial.println("");
    Serial.println("mDNS启动");
}
MDNS.addService("http", "tcp", 80);

Serial.print("IP 地址: " + WiFi.localIP());  //假设WiFi.localIP()为192.168.52.60
Serial.println("http://esp8266");
Serial.println("测试互联网通信!");
String buf = gethttp_API("网易云热评接口", 80);
if (buf != "") {
    Serial.println("网易云接口返回:" + buf);
}
可以通过  http://esp8266 访问esp
或者  192.168.52.60 访问esp
没有配置wifi之前,mdns无效,配置好wifi,esp 被分配了 ip 地址
mdns 才有效,才能代替 ip 地址访问
同一个局域网内的其他设备,可以通过 ip 或者 mdns 设置的 hostname 访问 esp

mqtt

零基础入门学用物联网 – MQTT基础篇

在这里插入图片描述

2-1 QoS 服务质量等级

接收端连接服务端时cleanSession设置为false
接收端订阅主题时QoS=1
发布端发布消息时QoS=1

esp设置订阅 qos=1 时,mqtt 发送消息
mqtt 端 qos=2,qos=1,qos=0,esp都可以收到

	qos    esp断电了,重新上电 esp   esp是否可以收到断电前发送的的消息
    qos=0						   否
    qos=1						   是
    qos=2						   是


如果esp断电了,重新上电 esp,esp可以收到断电前发送的 qos=1/0 的消息

应用

接收到用户信息,小车没电了,重新上电,之前的操作应该失效

2-3 保留消息

向一个topic发送一个保留消息,只要有设备订阅这个topic,就可以马上收到这个保留消息

设备断电后重新上电,相当于重新订阅了topic,会收到保留消息

应用

设备启动,友好的提示

最新的消息以保留消息的形式发送,设备启动/设备订阅,立即收到最新的消息

保留消息只会收到一条,多余显示的是 MQTT.fx 的缓存

在这里插入图片描述

2-6 MQTT遗嘱

首先在客户端设置遗嘱相关设置,连接服务端

订阅了遗嘱主题的客户端会在客户端意外断线时,收到服务端发布的遗嘱消息。

应用

意外断电,提示消息
设备在线状态发布

2-8 MQTT连接服务器用户密码认证

自己搭建的服务器,不希望任何人都能连接,设置用户名密码
esp在连接时间设置用户名密码才能连接到服务端 

应用

自己搭建的服务器,不希望任何人都能连接,设置用户名密码
给不同的用户分配不同的用户名密码,识别不同的客户端和人

用户名为 test-user,则注意 发布消息 和 订阅消息 的主题都要有前缀 test-user/topic-name

在这里插入图片描述

在这里插入图片描述

Arduino

附加开发板管理器网址: http://wechat.doit.am/package_esp8266com_index.json 或者 http://arduino.esp8266.com/stable/package_esp8266com_index.json http://arduino.esp8266.com/versions/2.4.1/package_esp8266com_index.json (ok)

想做什么模块就下载什么库,想做超声波模块就搜Arduino超声波类库,下载sr40类库,github Arduino社区

vsocde

vscode 配置 Arduino 环境

vscode 插件 PlatFormIO IDE
PlatformIO入门

vscode 配置 Arduino 环境

platformio 上传文件到文件系统

ESP8266 NodeMCU with VS Code and PlatformIO:上传文件到文件系统(LittleFS)

在项目文件夹中创建一个名为data的文件夹。这可以在 VS Code 上完成。
用鼠标选择您正在处理的项目文件夹。单击“新建文件夹”图标以创建一个新文件夹。
注意

建议先上传HTML再上传代码文件。
因为在ESP上运行的代码需要调用HTML文件中的资源,
如果HTML文件还没有上传,代码会找不到资源,导致无法正常运行。
因此,为了避免这种情况,应该先将HTML上传,再上传代码文件

在这里插入图片描述

 然后,选择新创建的数据文件夹并通过单击“新建文件”图标创建要上传的文件

在这里插入图片描述

上传文件系统映像
注意

必须要在 platformio.ini 中加入 
board_build.filesystem = littlefs
否则上传失败

在这里插入图片描述

在这里插入图片描述

 重要提示:要成功上传文件系统映像,您必须关闭
与主板的所有串行连接(串行监视器)。

在这里插入图片描述

LittleFS 对比 SPIFFS

ESP32搭建WEB服务器八(使用更有效率的LittleFS文件系统)

vscode 快捷键

主题切换   ctrl+k+t 

emqx

基于EMQX从零开始在阿里云ECS搭建MQTT服务器

Linux安装EMQX服务的过程

emqx官网方式

用的emqx是比较新的版本,openssl版本依赖包必须是大于1.1.1版本及以上的

注意cenos 7 安装时选下面的选项。

在这里插入图片描述

设置环境变量
[root@xxxx emqx]# vim /etc/profile

#EMQX Enviroment
EMQ_HOME=/root/program/emqx
PATH=$EMQ_HOME/bin:$PATH
CLASSPATH=$EMQ_HOME/lib:$CLASSPATH
export EMQ_HOME PATH CLASSPATH

[root@xxx emqx]# source /etc/profile

官网emqx常见错误

emqx5.x无法启动

emqx4.x卸载后安装emqx5.x无法启动

软件

烧录工具:flash_download_tools_v3.6.8.exe

MQTT客户端软件–MQTTfx

公用mqtt服务器

串口调试助手:AiThinker Serial Tool V1.2.3

Arduino 一键配置 8266 环境:8266_package_3.1.0_arduinome.exe

问题

需要开发工具,库文件,模块,先在群里找

软件问题

一直 Connecting 不过

如果引用了第三方库,即使第三方库中引用了 #include <Arduino.h>
如果 main.cpp 中只引用了第三方库,没有引用 #include <Arduino.h> 可能会导致一直 connect

尝试在 main.cpp 中添加 #include <Arduino.h>

platformIO串口监视器一直改不过来

如果在 platformInfo.ini 中设置了下面代码,重新上电,重新打开串口监视器,监听的波特率还不对,可以尝试重新创建 platformIO 项目,把之前的代码复制过来,重新烧录程序

monitor_speed = 115200

注意区分编码

在这里插入图片描述

platformio 添加自定义库

PlatformIO添加库文件方法

在这里插入图片描述

在这里插入图片描述

添加外部库

①准备好所需要的库文件(不能为压缩包)

② 将文库文件夹放到下面的目录中

C:\Users\{username}\.platformio\packages\framework-arduinoespressif8266\libraries

platformio.ini添加配置后需要保存,否则不生效

platformio.ini添加配置后需要保存,否则不生效
例如下面添加了 PubSubClient.h,如果不保存,代码中的 include 还是会爆红

在这里插入图片描述

代码问题

用arduino编译esp8266代码报错No such file or directory

ch340 + esp8266 + arduino 编译和下载程序

在这里插入图片描述
选择 nodemcu 12e 而不是 generic 8266

在这里插入图片描述

在 platformio 中可以选择 esp01s,或其他基础板

在这里插入图片描述

用VScode+PlatformIO玩8266的函数定义顺序

记得函数要放在loop前面,不然编译报错,因为C++的函数必须先声明,后调用

设置vscode代码格式化c++时大括号不换行

1. 文件–首选项–设置,或者左下角齿轮–设置
2. 搜索框搜索format ,点击在扩展c/c++

在这里插入图片描述

BUILTIN_LED = LED_BUILTIN = 2

在 esp 8266 中BUILTIN_LED = LED_BUILTIN = 2

在这里插入图片描述

在这里插入图片描述

设置波特率

monitor_speed = 115200

在这里插入图片描述

上面只对当前工程生效,如需修改系统默认波特率,看下面

修改PlatformIO串口监视器的默认波特率

Serial.println()

是先输出括号中内容,再输出空行
Serial.println("ClientId:");

输出
ClientId:
空行

if 和 #if

if 和 #if

头文件定义覆盖

c++引用的头文件中定义了 #define DEFPORT 80,如何覆盖头文件中DEFPORT 的值

在 C++ 中,可以通过下面几种方法覆盖头文件中的宏定义:

定义在头文件之后的宏定义:如果在头文件之后定义一个新的宏定义,则该宏定义将覆盖之前定义的宏定义

#include <header.h>
#undef DEFPORT
#define DEFPORT 9000

定义在头文件之前的宏定义:如果在头文件之前定义宏定义,则该宏定义将在整个文件中有效。

#define DEFPORT 9000
#include <header.h>

使用 #undef 宏:您可以使用 #undef 宏在包含头文件之前撤消头文件中的宏定义

#undef DEFPORT
#define DEFPORT 9000
#include <header.h>

请注意,选择正确的方法取决于您的需求和代码结构。这些方法仅提供了一种覆盖头文件中的宏定义的可能性。

根据 #define 开启配置

场景

EspWiFiPW.h 引用了 SELFDEF.h

SELFDEF.h中有
#define DEFPORT 30606

EspWiFiPW.h中有
#ifdef DEFAULT
#undef DEFPORT
#define DEFPORT 80
#endif

想要通过 #define DEAULT 更改DEFPORT

注意先要使用 #define,然后再引入EspWiFiPW.h,否则不生效

#define eeshow
#include <EspWiFiPW.h>

WiFi.mode(WIFI_STA) 模式下连接 wifi

注意 while (WiFi.status() != WL_CONNECTED) 内部的 delay(time) 时间不能设置太小,否则WiFi.status 尝试时间太短会导致连不上 wifi

void EspWiFiPW::ConnectBySTA(String ssid, String pwd) {
    WiFi.disconnect();
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid.c_str(), pwd.c_str());
    Serial.println("begin connect WiFi: " + SSID);
    int i = 0;
    while (WiFi.status() != WL_CONNECTED) {
        delay(2500);        //这里设置太小 WiFi.status 尝试时间太短会导致连不上
        Serial(".");
        i++;
        if (i > Timeout - 1) {
            Serial.println();
            Serial.println("wifi connect time out, please retry...");
            break;
        }
    }
    if (WiFi.isConnected()) {
        Serial.println();
        Serial.println("connect suceess, WiFi: " + SSID);
        Serial.println("local device IP: " + WiFi.localIP().toString();
    }
    Serial.println();
}

其它问题

烧录时提示等待上电同步

ESP8266使用MQTT固件,AT指令配网

ch340 + esp 烧录固件和程序

连接
ch340            esp8266

vcc(电源)         3v3
tx(串口发送)       rx
rx(串口接收)       tx
gnd               gnd

烧录固件,arduino下载程序时都需要短接
esp的 gnd 和 Io0  
使用 esp8266模块 + 340husb转换器时,esp8266 download tools 烧录固件时需要短接esp的 GND 和 IO0
烧录/下载程序完成后,就可以把短接线去除了

运行程序时不需要短接
短接 ->   复位/重新上电/重插电脑   ->  烧录/下载程序

不关闭串口监视器下载程序可能会下载报错

ESP8266 基础篇:启动时 rst cause 和 boot mode

ESP8266 基础篇:启动时 rst cause 和 boot mode

ESP8266/ESP32启动运行问题汇总(持续更新中…)

ESP8266/ESP32启动运行问题汇总(持续更新中…)

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

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

相关文章

隐藏在背后的真相——数据存储的方式(上)

数据存储的方式 1. 数据类型详细介绍1.1类型的基本归 2. 整形在内存中的存储2.1原码&#xff0c;反码&#xff0c;补码2.2有符号&#xff08;unsigned&#xff09;和无符号&#xff08;signed&#xff09;2.3 例题 3. 大小端字节序介绍及判断 所属专栏&#xff1a;C语言❤️ &a…

学网络安全可以参考什么方向?该怎么学?

在这个圈子技术门类中&#xff0c;工作岗位主要有以下三个方向&#xff1a; 安全研发安全研究&#xff1a;二进制 方向安全研究&#xff1a;网络渗透方向 下面逐一说明一下。 安全研发 安全行业的研发岗主要有两种分类&#xff1a; 与安全业务关系不大的研发岗位与安全业务…

英文论文(sci)解读复现【NO.13】基于YOLOv5的自然场景下苹果叶片病害实时检测

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

python 真正的密码,字符串排序

代码&#xff1a; from typing import List def turePassword(wordList:List[str]) ->str:wordList list(set(wordList))#排序先字符串长度&#xff0c;其次字典序wordList.sort(keylambda x :(len(x),x))ans for i in range(len(wordList)-1,-1,-1):flag Truefor j in …

蓝奥声核心技术分享——无线同步群控技术

1.技术背景 无线同步群控技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策&#xff0c;属于蓝奥声核心技术--边缘协同感知(EICS&#xff09;技术的关键支撑性技术之一。该项技术涉及无线物联网边缘域网络的无线通信与智能控制技术领域&#xff0c;具体主要…

浅谈人工智能怎么提升工作效率

一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;逐渐成为各行各业提高工作效率的重要工具。本报告旨在通过分析人工智能在提高工作效率方面的作用&#xff0c;探讨其具体实现方法&#xff0c;并通过案例分析来深入了解其实际应用效果和优缺点&…

算法8.从暴力递归到动态规划1

算法|8.从暴力递归到动态规划1 目前感觉&#xff0c;背包问题和货币数组问题本质相同&#xff0c;货币的与dp相关的三种代码写完了&#xff0c;快复习不完了&#xff0c;背包暂时先不写了&#xff0c;回头再写&#xff0c;补充&#xff0c;再总结&#xff0c;结合那个C大神的文…

对KMP算法的一点碎碎念——上篇

对KMP算法的一点碎碎念——上篇 文章目录 对KMP算法的一点碎碎念——上篇1. KMP 算法 Next数组 求解问题1.1 前置知识-最长公共前后缀LCP1.1.1 前缀与后缀1.1.2 最长公共前后缀LCP 1.2 手算法求解 Next数组值(3种常见情况)1.2.1 情况1: next数组 正常存放匹配字符的长度情况1的…

前端面试-React专题

目录 一.React1. React 的主要特性是什么2.React 的核心思想是3. 什么是jsx4. render()函数5. 函数组件和类组件的区别6. HTML和React中事件处理的区别7. React 中的合成事件8. 虚拟Dom&#xff1f;为什么使用&#xff1f;如何实现&#xff1f;9. 在 constructor 中给 super 函…

Excel - 如何给单元格加上下拉框

当你使用下拉列表来限制人们在单元格中的输入时&#xff0c;数据输入会更快、更准确。当有人选择一个单元格时&#xff0c;下拉列表的向下箭头就会出现&#xff0c;可以点击它并进行选择。 创建一个下拉列表 / Create a drop-down list 你可以通过提供下拉列表使工作表更有效率…

基于微信小程序的教学质量评价系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

ubuntu下编译esp32 micropython固件编译(可自行增加模块)

目录 0. 前言1. 安装ESP-IDF2. 初始化Micropython仓库3. 选择ESP-IDF相应版本情况&#xff11;情况2 4. 开始编译5.烧录固件 0. 前言 为ESP32编译Micropython固件 操作系统&#xff1a;ubuntu22.04 1. 安装ESP-IDF 本节需要ESP-IDF环境&#xff0c;安装开发环境是必要的。 …

FPGA之手把手教你做多路信号发生器(STM32与FPGA数据互传控制波形生成)

文章目录 博主的念叨一、任务介绍1、本文目标2、设计思路3、设计注意事项 二、设计代码1.顶层文件代码2.波形生成模块3.ROM例化4.PLL例化5.引脚分配 总结 博主的念叨 博主建了一个技术资源分享的群&#xff0c;开源免费&#xff0c;欢迎进来唠嗑280730348 最近趁热打铁做了一…

pandas库的常用操作介绍

目录 1.1.Pandas概述2.Pandas索引结构3.groupby学习5.Pandas数值运算二元统计6.对象操作7.merge合并显示设置9.pivot操作10. 时间操作11.常用操作12.groupby操作13.字符串操作14.索引操作15.pandas绘图操作 1.1.Pandas概述 Python的pandas库是一个数据处理和数据分析库&#x…

javascript基础七:说说你对Javascript中作用域的理解?

一、作用域 作用域&#xff0c;即变量&#xff08;变量作用域又称上下文&#xff09;和函数生效&#xff08;能被访问&#xff09;的区域或集合 换句话说&#xff0c;作用域决定了代码区块中变量和其他资源的可见性 举个粟子 function myFunction(){let name小爱同学 } undef…

6.2:荷兰国旗问题

文章目录 实现key前面的数都小于等key&#xff0c;key后面的数都大于等于key1&#xff1a;前后指针法&#xff1a;2&#xff1a;挖坑法3&#xff1a;单指针法&#xff08;左神&#xff09; 辗转相除法求最大公约数 实现key前面的数都小于等key&#xff0c;key后面的数都大于等于…

【leetCode:剑指 Offer】20. 表示数值的字符串

1.题目描述 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。 数值&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 若干空格 一个 小数 或者 整数 &#xff08;可选&#xff09;一个 e 或 E &#xff0c;后面跟着一个 …

深入篇【C++】类与对象:详解内部类+匿名对象+编译器对拷贝的优化

这里写目录标题 Ⅰ.内部类【特点】1.天生友元2.直接访问static成员3.访问限制符限制4.外部类的大小 Ⅱ.匿名对象【特点】1.一行生命域2.对象具有常性3.可强行续命 Ⅲ.拷贝对象时编译器的优化 Ⅰ.内部类 概念&#xff1a;一个类定义在另一个类内部&#xff0c;这个内部的类就叫做…

【Unity100个实用小技巧】如何修改UI上材质的Shader

☀️博客主页&#xff1a;CSDN博客主页&#x1f4a8;本文由 萌萌的小木屋 原创&#xff0c;首发于 CSDN&#x1f4a2;&#x1f525;学习专栏推荐&#xff1a;面试汇总❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&#…

mysql基本操作1

库的基本操作 1.show variables like character_set_database 查看系统默认的字符集&#xff0c;若是指定数据库下使用该SQL&#xff0c;则查看的是该数据库对应的字符集。 2.show variables like collation_database 查看系统默认的字符集校验规则&#xff0c;指定数据库下使用…