当前位置: 首页 > news >正文

arduino 编程esp8266

概述:

       1.板子外设资源的访问:Libraries - Arduino Reference

    注意:开发板未nodeMCU1.0(esp-12e)(esp8266-01s上调试的。)

     2.硬件接线

       en,vcc接3.3v,gnd接地(也就是和串口共地),gpio1接地。tx接串口rx,rx接串口tx,rst不接的化烧录完断电重启就行,拔掉gpio1。

    3,界面配置

        

  烧录波特率:

          9600,停止位,无校验,8位数据,硬件流控制无。9600不行试一下115200。

         等编译完成显示uplodaing的时候再给板子上电,当然你买的现成开发板就不用看这个,因为这个是esp8266-01s那个模块的。

   4.加载库和寻找库

          直接搜,然后安装,安装完点那个三点下载例程。 

       

       

5.WiFi连接扫描和http

  代码: 

    #include <ESP8266WiFi.h>//默认,加载WIFI头文件#include <Arduino_JSON.h> //加载解析文件库#include <ArduinoHttpClient.h>  //加载http客户端库WiFiClient espClient;const char * ssid="wifi_name";//wifi名称const chat * pwd="wifi_password";//WiFi 密码HttpClient http = HttpClient(espClient,"www.baidu.com",80);//定义一个http客户端String mes;
void setup(){WiFi.begin(ssid.pwd);//连接wifiif(WiFi.state()==3)printf("连接成功");delay(500);int n=WiFi.scanNetworks();//扫描附近wifimes=JsonSerialization(n);  //将扫描出的WiFi信息json序列化printf(mes);//打印出扫描到的附近wifidelay(100);
}void loop(){String contentType="application/json"; //请求内容格式String url=""; //数据路径httpm.get(url);//发送get请求,所有的东西都在url中int mhttpCode = http.responseStatusCode();//阻塞响应,就是等待响应,一般10s超时跳过String mresponse = http.responseBody();  //获得响应数据JSONVar mtemp=JSON.parse(mresponse);//将字符串转成json格式if (JSON.typeof(mtemp) == "undefined") {Serial.println("Parsing input failed!");return;}delay(1000);String contentType="application/json";String url="";http.post(url, contentType, message);  //可以发现post和get还是比较像的,数据和url不在一起int httpCode = http.responseStatusCode();String response = http.responseBody();  printf(response);delay(1000);}

总结:

       非常简单,基本上全部封装到位,只需要简单的调用填参数就行。http中的get和post本质没有区别,只不过在封装的时候考虑了标志,数据的位置,服务器的解析。

6.数据的动态存储和读写

     

#include <se_eeprom.h>  //这个库包含了arduino.h和eeprom.h//可以读取1字节到32字节的数据
void setup(){SE_EEPROM my_eeprom;//建立对象unsigned short eeprom_size=256;//flash存储区大小my_eeprom.SetEEPROMSize(256);//申请一个256字节的flash存储区my_eeprom.WriteEEPROMByte(1, ver);//写1到数据区索引1ver=my_eeprom.ReadEEPROMByte(1);//在数据区索引1读取数据my_eeprom.WriteEEPROMStr32(64, "Hello World!!!");//写字符串到数据区索引64Serial.println(my_eeprom.ReadEEPROMStr32(64));//从数据区索引64读取字符串
}
//这个库是毛子写的,可以发现这个库非常好用
//直接搜就可以在ide上搜到
void loop(){}

7.全局常量定义在flash节省ram空间

//字节和整数
// 保存无符号整型
const PROGMEM uint16_t charSet[] = { 65000, 32796, 16843, 10, 11234};// 保存字符
const char signMessage[] PROGMEM = {"I AM PREDATOR,  UNSEEN COMBATANT. CREATED BY THE UNITED STATES DEPART"};unsigned int displayInt;
char myChar;void setup() {Serial.begin(9600);while (!Serial);  // wait for serial port to connect. Needed for native USB// put your setup code here, to run once:// 读回一个2字节长整型for (byte k = 0; k < 5; k++) {displayInt = pgm_read_word_near(charSet + k);Serial.println(displayInt);}Serial.println();// 读回一个字符int signMessageLength = strlen_P(signMessage);for (byte k = 0; k < signMessageLength; k++) {myChar = pgm_read_byte_near(signMessage + k);Serial.print(myChar);}Serial.println();
}void loop() {// put your main code here, to run repeatedly:
}//存储字符串
/*PROGMEM string demoHow to store a table of strings in program memory (flash),and retrieve them.Information summarized from:http://www.nongnu.org/avr-libc/user-manual/pgmspace.htmlSetting up a table (array) of strings in program memory is slightly complicated, buthere is a good template to follow.Setting up the strings is a two-step process. First, define the strings.
*/#include <avr/pgmspace.h>
const char string_0[] PROGMEM = "String 0"; // "String 0" 等将以表格式存储
const char string_1[] PROGMEM = "String 1";
const char string_2[] PROGMEM = "String 2";
const char string_3[] PROGMEM = "String 3";
const char string_4[] PROGMEM = "String 4";
const char string_5[] PROGMEM = "String 5";
//字符串// 把字符串放到表中.const char *const string_table[] PROGMEM = {string_0, string_1, string_2, string_3, string_4, string_5};char buffer[30];  // 确认能够存储字符串的最大长度void setup() {Serial.begin(9600);while (!Serial);  // wait for serial port to connect. Needed for native USBSerial.println("OK");
}void loop() {/* Using the string table in program memory requires the use of special functions to retrieve the data.The strcpy_P function copies a string from program space to a string in RAM ("buffer").Make sure your receiving string in RAM is large enough to hold whateveryou are retrieving from program space. *//*这段话的意思是使用字符串表编程到内存,需要特殊的函数复原数据,而strcpy_P就是把数据从内存拷贝到ram区域,保证ram区有足够的空间。*/for (int i = 0; i < 6; i++) {strcpy_P(buffer, (char *)pgm_read_ptr(&(string_table[i])));  // 必要的格式转换和定义Serial.println(buffer);delay(500);}
}/*ram是程序运行区,flash也就是eeprom就是程序存储区*/
/*大部分程序都是三级流水线*///取指:把数据从存储区取出来放到缓存区//译码:把缓存区的数据解析,它们该去哪?有的去寄存器,有的去堆栈,有的去外设//执行:把数据放到它应该去的地方,然后晶振一动,数据就被运行,然后pc+1

代码是官网上抄的,官网全英文,不想区去官网看英文的可以看这个。

  官网地址:PROGMEM - Arduino Reference

8.文件的操作(有的开发板不支持,差一些开发板的资料) 

      esp32和esp8266架构支持。毛子的话看不懂,但是代码很清晰简单。

#include <Arduino.h>
#include <FileData.h>
#include <LittleFS.h>struct Data {uint8_t val8;uint16_t val16;uint32_t val32 = 12345;char str[20];
};
Data mydata;FileData data(&LittleFS, "/data.dat", 'B', &mydata, sizeof(mydata));void setup() {Serial.begin(115200);delay(1000);Serial.println();LittleFS.begin();// прочитать данные из файла в переменную// при первом запуске в файл запишутся данные из структурыFDstat_t stat = data.read();switch (stat) {case FD_FS_ERR: Serial.println("FS Error");break;case FD_FILE_ERR: Serial.println("Error");break;case FD_WRITE: Serial.println("Data Write");break;case FD_ADD: Serial.println("Data Add");break;case FD_READ: Serial.println("Data Read");break;default:break;}Serial.println("Data read:");Serial.println(mydata.val8);Serial.println(mydata.val16);Serial.println(mydata.val32);Serial.println(mydata.str);
}void loop() {// data.tick();  // вызывать тикер в loop// можно отловить момент записиif (data.tick() == FD_WRITE) Serial.println("Data updated!");// запишем в данные строку из монитора порта// а также присвоим остальным переменным случайные значенияif (Serial.available()) {int len = Serial.readBytes(mydata.str, 20);mydata.str[len] = '\0';mydata.val8 = random(255);mydata.val16 = random(65000);Serial.println("Update");// отложить обновлениеdata.update();}
}

代码地址:GitHub - GyverLibs/FileData: Замена EEPROM для ESP8266/32 для хранения любых данных в файлах

相关文章:

arduino 编程esp8266

概述&#xff1a; 1.板子外设资源的访问&#xff1a;Libraries - Arduino Reference 注意&#xff1a;开发板未nodeMCU1.0(esp-12e)(esp8266-01s上调试的。) 2.硬件接线 en,vcc接3.3v,gnd接地&#xff08;也就是和串口共地&#xff09;&#xff0c;gpio1接地。tx接串口rx,rx接串…...

基于springboot实现数据资产管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现数据资产管理系统演示 摘要 固定资产管理系统主要是完成对系统用户管理、资产信息管理、资产变更管理、资产用途管理、资产类别管理和资产增减管理。因为利用本系统管理员可以直接录入信息&#xff0c;修改信息&#xff0c;删除信息&#xff0c;并且若在录入…...

在Java中如何将十进制转换为二进制,八进制,十六进制以及它们之间的互相转换

目录 一、算法实现进制之间的转换 &#xff08;1&#xff09;十进制转换为二进制 &#xff08;2&#xff09;二进制转换成十进制 二、Java中的API实现进制转换 &#xff08;1&#xff09;十进制转换为二进制 &#xff08;2&#xff09;十进制转换为八进制 &#xff08;3…...

AK/SK加密认证

一、AK/SK概念 Access Key (AK)&#xff1a;AK是一个全局唯一的字符串标识符&#xff0c;用于标识用户。它类似于用户名&#xff0c;但仅用于身份识别&#xff0c;并不包含任何秘密信息。 Secret Access Key (SK)&#xff1a;SK则是一个高度保密的密钥&#xff0c;类似于密码&…...

前端实现websocket通信讲解(vue2框架)

websocket&#xff1a; WebSocket是HTML5下一种新的协议&#xff08;websocket协议本质上是一个基于tcp的协议&#xff09;它实现了浏览器与服务器全双工通信&#xff0c;能更好的节省服务器资源和带宽并达到实时通讯的目的Websocket是一个持久化的协议 websocket提供的api&a…...

解决ffmpeg播放摄像头延时的问题(项目案例使用有效)

第一1.目前使用的对接的海康威视的摄像机,并且采用的流媒体服务器NodeMediaServer 进行收数据流并发流数据。但是延时达到了20秒,所以客户看到的效果不是很乐观,没有办法,只能开始优化播放延时的问题,至于对接摄像头的方案有好几种。我这种情况是时间没有延迟只有画面是有…...

Android 音频系统

导入 早期Linux版本采用的是OSS框架&#xff0c;它也是Unix及类Unix系统中广泛使用的一种音频体系。 ALSA是Linux社区为了取代OSS而提出的一种框架&#xff0c;是一个源代码完全开放的系统(遵循GNU GPL和GNU LGPL)。ALSA在Kernel 2.5版本中被正式引入后&#xff0c;OSS就逐步…...

Java必须掌握的二叉堆知识点(含面试大厂题含源码)

二叉堆是一种常用的优先队列数据结构&#xff0c;广泛应用于各种场景&#xff0c;比如任务调度、带权图的最短路径算法&#xff08;如Dijkstra算法&#xff09;等。在Java面试中&#xff0c;了解二叉堆的基本概念、实现方式和操作是非常重要的。下面是一些关于二叉堆的关键知识…...

[Java、Android面试]_03_java内存管理:虚拟内存、堆、垃圾回收

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料&#xff0c;感兴趣的朋友可收藏关注&#xff0c; 现分享如下&#xff1a; 文章目录 1. Java虚拟机运行时数据区2. Java堆3. 垃圾回收3.1 如…...

PTA题解 --- 求整数段和(C语言)

今天是PTA题库解法讲解的第二天&#xff0c;接下来讲解求整数段和&#xff0c;题目如下&#xff1a; 为了解决这个问题&#xff0c;你可以遵循以下的思路&#xff1a; 1. 读取输入的两个整数A和B。 2. 使用一个for循环&#xff0c;从A遍历到B。 3. 在循环中&#xff0c;打印当…...

virsh管理虚拟机的命令行工具

virsh是一个管理虚拟机的命令行工具&#xff0c;提供了丰富的命令来查看、创建、管理虚拟机。以下是一些常用的virsh命令&#xff1a; 查看帮助和版本&#xff1a; virsh --help&#xff1a;查看virsh命令的帮助信息。virsh -version&#xff1a;查看virsh的版本信息。 查看虚…...

数据集成平台选型建议

一 数据集成介绍 数据集成平台是一种用于管理和协调数据流动的软件工具或服务。它的主要目标是将来自多个不同数据源的数据整合到一个统一的、易于访问和分析的数据存储库中。这些数据源可以包括数据库、云应用、传感器、日志文件、社交媒体等等。数据集成平台的关键任务是确保…...

Centos8安装Docker,使用阿里云源

一、前期准备 1.关闭防火墙&#xff0c;SELINUX systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 sed -i "s/SELINUXenforcing/SELINUXdisabled/g" /etc/selinux/config查看状态 systemctl status firewalld systemctl status…...

FFmpeg概念和简单使用

FFmpeg是一个开源的跨平台多媒体处理工具套件&#xff0c;包含了用于处理音频、视频和图像的各种工具、库和命令行程序。它由一个主要的命令行工具ffmpeg和一系列相关工具组成&#xff0c;可以执行各种各样的多媒体操作。以下是FFmpeg中一些重要的概念&#xff1a; 音频、视频和…...

OJ_最长公共子序列

题干 C实现 #include <iostream> #include <stdio.h> #include <algorithm> using namespace std;int dp[1002][1002];int main() {int n,m;char s1[1001];char s2[1001];scanf("%d%d",&n,&m);scanf("%s%s",s1,s2);//dp[i][j]是…...

SpringBoot拦截器获取token用户对象优雅地传递到Controller层

项目场景&#xff1a; SpringBoot拦截器获取token用户对象优雅地传递到Controller层 问题描述 后端有许多接口都需要请求中携带有正确的Token&#xff0c;这时采用拦截器来验证token&#xff0c;但是每个接口都还是需要解析一遍token&#xff0c;浪费资源&#xff0c;不免显得…...

从零开始学HCIA之SDN03

1、VXLAN相关概念 &#xff08;1&#xff09;NVE&#xff08;Network Virtual Edge&#xff09;&#xff0c;网络虚拟化边界&#xff0c;是运行VXLAN的设备&#xff0c;其实体是一种虚拟逻辑接口&#xff0c;负责VXLAN数据的封装和解封装&#xff0c;其主要参数包括源VTEP以及…...

C语言深度理解之——结构体内存对齐

前言&#xff1a; 在C语言中&#xff0c;结构体&#xff08;struct&#xff09;是一种用户自定义的数据类型&#xff0c;可以包含不同类型的数据成员。在定义结构体时&#xff0c;编译器会根据平台的要求对结构体的内存进行对齐&#xff0c;以提高内存访问的效率。结构体内存对…...

LeetCode 热题 100 | 回溯(二)

目录 1 39. 组合总和 2 22. 括号生成 3 79. 单词搜索 菜鸟做题&#xff0c;语言是 C&#xff0c;感冒快好版 关于对回溯算法的理解请参照我的上一篇博客&#xff1b; 在之后的博客中&#xff0c;我将只分析回溯算法中的 for 循环。 1 39. 组合总和 题眼&#xff1a;c…...

混合内容错误https中加载了http

一、遇到问题 iframe嵌套时&#xff0c;混合内容错误https中加载了http&#xff0c;但是已经确认了ifreme中是https的&#xff0c;最后发现在/my/edit?applyid1改为/my/edit/?applyid1&#xff0c;加了一个斜杠&#xff0c;直接解决了 /my/edit是vue页面&#xff0c;其他页…...

用Vector2.Lerp、MoveTowards和SmoothDamp搞定Unity 2D物体平滑移动(附性能对比)

Unity 2D平滑移动实战&#xff1a;Vector2.Lerp vs MoveTowards vs SmoothDamp 在2D游戏开发中&#xff0c;角色的移动效果直接影响玩家的操作体验。一个生硬的位移会破坏游戏沉浸感&#xff0c;而恰到好处的缓动则能让操作手感提升一个档次。Unity提供了三种核心方法来实现2D平…...

RoPE与KV缓存优化:提升Transformer长序列处理能力

1. 旋转位置编码&#xff08;RoPE&#xff09;技术解析旋转位置编码&#xff08;Rotary Position Embedding, RoPE&#xff09;是近年来Transformer架构中位置编码技术的重要突破。传统Transformer使用绝对或相对位置编码&#xff0c;而RoPE通过旋转矩阵实现位置信息的注入&…...

CMU localPlanner算法深度解析:从‘采样路径’到‘最优选择’的完整决策逻辑与代码实现

CMU localPlanner算法深度解析&#xff1a;从路径采样到最优决策的工程实现 在移动机器人导航领域&#xff0c;路径规划算法的实时性与可靠性直接决定了系统的整体性能。CMU团队开源的localPlanner以其独特的"采样-评估-选择"架构&#xff0c;在复杂环境中展现出卓越…...

Keil MDK中Flash算法RAM配置的DWORD对齐问题解析

1. 问题现象与背景解析当使用Keil MDK开发环境配合J-LINK或ULINK系列调试器时&#xff0c;在Flash Download配置选项卡中设置Flash算法RAM大小时&#xff0c;可能会遇到"Invalid Number Error: Number must be DWORD Aligned"的错误提示。这个错误通常发生在以下场景…...

5分钟掌握Excel MCP Server:无需安装Excel的终极数据处理方案

5分钟掌握Excel MCP Server&#xff1a;无需安装Excel的终极数据处理方案 【免费下载链接】excel-mcp-server A Model Context Protocol server for Excel file manipulation 项目地址: https://gitcode.com/gh_mirrors/ex/excel-mcp-server 在数据驱动的现代工作中&…...

从手机镜头到AR眼镜:几何光学三大定律如何塑造你身边的成像技术

从手机镜头到AR眼镜&#xff1a;几何光学三大定律如何塑造你身边的成像技术 当你用手机拍下一张照片&#xff0c;或是戴上AR眼镜看到虚拟与现实融合的世界时&#xff0c;背后其实隐藏着几个世纪前就被发现的物理定律。这些看似高深的光学原理&#xff0c;正以最直接的方式影响…...

什么是vibe coding:概念解析与首选工具Trae实测

什么是vibe coding&#xff1a;概念解析与首选工具Trae实测你是否好奇vibe coding到底是什么&#xff0c;为何能成为2025年最火的开发方式&#xff1f;是否想知道vibe coding和传统编程的核心差异&#xff0c;以及用什么工具能高效落地&#xff1f;vibe coding是提示词驱动开发…...

NotebookLM时间线创建全流程拆解(从零到专业级时间叙事)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM时间线创建全流程拆解&#xff08;从零到专业级时间叙事&#xff09; NotebookLM 的时间线&#xff08;Timeline&#xff09;功能并非内置独立模块&#xff0c;而是依托其“脚注驱动叙事”机制&am…...

脉冲相机与NeRF结合的高速场景三维重建技术

1. 高速场景重建的技术挑战与解决方案在计算机视觉领域&#xff0c;高速场景的三维重建一直是个棘手的问题。传统RGB相机受限于曝光时间和帧率&#xff0c;在拍摄快速运动物体时会产生严重的运动模糊。这种模糊不仅影响视觉效果&#xff0c;更会破坏三维重建所需的几何和纹理信…...

ElevenLabs广西话输出突然失真?一文定位3类隐藏错误:声母浊化丢失、入声韵尾截断、连读变调失效

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs广西话语音输出失真现象概览 ElevenLabs 作为当前主流的AI语音合成平台&#xff0c;其多语言支持能力广受开发者青睐。然而&#xff0c;在针对广西话&#xff08;粤语勾漏片与邕浔片混合变体…...