当前位置: 首页 > 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;其他页…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...