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
概述: 1.板子外设资源的访问:Libraries - Arduino Reference 注意:开发板未nodeMCU1.0(esp-12e)(esp8266-01s上调试的。) 2.硬件接线 en,vcc接3.3v,gnd接地(也就是和串口共地),gpio1接地。tx接串口rx,rx接串…...

基于springboot实现数据资产管理系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现数据资产管理系统演示 摘要 固定资产管理系统主要是完成对系统用户管理、资产信息管理、资产变更管理、资产用途管理、资产类别管理和资产增减管理。因为利用本系统管理员可以直接录入信息,修改信息,删除信息,并且若在录入…...

在Java中如何将十进制转换为二进制,八进制,十六进制以及它们之间的互相转换
目录 一、算法实现进制之间的转换 (1)十进制转换为二进制 (2)二进制转换成十进制 二、Java中的API实现进制转换 (1)十进制转换为二进制 (2)十进制转换为八进制 (3…...

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

前端实现websocket通信讲解(vue2框架)
websocket: WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的Websocket是一个持久化的协议 websocket提供的api&a…...

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

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

Java必须掌握的二叉堆知识点(含面试大厂题含源码)
二叉堆是一种常用的优先队列数据结构,广泛应用于各种场景,比如任务调度、带权图的最短路径算法(如Dijkstra算法)等。在Java面试中,了解二叉堆的基本概念、实现方式和操作是非常重要的。下面是一些关于二叉堆的关键知识…...

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

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

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

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

Centos8安装Docker,使用阿里云源
一、前期准备 1.关闭防火墙,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是一个开源的跨平台多媒体处理工具套件,包含了用于处理音频、视频和图像的各种工具、库和命令行程序。它由一个主要的命令行工具ffmpeg和一系列相关工具组成,可以执行各种各样的多媒体操作。以下是FFmpeg中一些重要的概念: 音频、视频和…...

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

从零开始学HCIA之SDN03
1、VXLAN相关概念 (1)NVE(Network Virtual Edge),网络虚拟化边界,是运行VXLAN的设备,其实体是一种虚拟逻辑接口,负责VXLAN数据的封装和解封装,其主要参数包括源VTEP以及…...

C语言深度理解之——结构体内存对齐
前言: 在C语言中,结构体(struct)是一种用户自定义的数据类型,可以包含不同类型的数据成员。在定义结构体时,编译器会根据平台的要求对结构体的内存进行对齐,以提高内存访问的效率。结构体内存对…...

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

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

游戏免费下载平台模板源码
功能介绍 此游戏网站模板源码是专门为游戏下载站而设计的,旨在为网站开发者提供一个高效、易于维护和扩展的解决方案。 特点: 响应式设计:我们的模板可以自适应不同设备屏幕大小,从而为不同平台的用户提供最佳的浏览体验。 …...

鸿蒙视频播放的实现
文章目录 前言播放效果视频播放的实现总结 一、前言 现在市面上很多应用都跟视频有关,那么在鸿蒙系统上怎么来播放视频呢,今天就讲解视频播放控件,让你也能快速地进行视频播放功能开发。 最后呢,我会提供一个鸿蒙中涉及的主要…...

QT----计算器
目录 1 搭建标准界面2、 逻辑编写2.1 初始化 github链接:基于qt的计算器 更多内容可以点击这里查看个人博客:个人博客 1 搭建标准界面 按照下图搭设界面 修改样式让这计算器看起来更像一点,同时对按钮分组进行样式编辑,添加字符…...

Linux:kubernetes(k8s)Deployment的操作(13)
创建deployment 命令 kubectl create deploy nginx-deploy --imagenginx:1.7.9 再去使用以下命令分别查询 ubectl get deploy kubectl get replicaset kubectl get pod 他是一个层层嵌套的一个关系 首先是创建了一个 deploy 里面包含着replicaset replicaset里面含有…...

20240619-James-快速鸟瞰并发编程, 呕心沥血整理的架构技术(第3篇)
接着第1, 2篇后,我们继续来跟进一下并发编程的其它内容,如下: 第9节 java.util.concurrent包 线程池 线程池的核心接口是ExecutorService。java.util.concurrent还提供了一个静态工厂类Executors,其中包含用于创建配置线程池的…...

C语言——详解字符函数和字符串函数(一)
Hi,铁子们好呀!今天博主来给大家更一篇C语言的字符函数和字符串函数~ 具体讲的内容如下: 文章目录 🎆1.字符分类函数💯💯⏩1.1 什么是字符分类函数的?💯💯⏩1.2 字符函数的类型有哪…...

三款内衣洗衣机的顶级较量:希亦、小吉、由利,谁才是性价比之王?
洗衣机在我们的生活中可谓是非常常见的了,几乎每家每户都具备着一台。即便是有洗衣机,也有不少人不会将自己我贴身衣物直接扔在洗衣机里清洗,而是会自己手工手洗。这跟我们传统上的观念有很大的关系,认为把内衣、内裤等贴身衣物放…...

Java枚举多值映射应用
在日常系统交互中,经常遇到两个系统间定义的枚举不一致,在接口调用时需要转换,记录实现,方便备查。 场景 双方的支付方式定义不同,一侧为数字,一侧为英文,若使用 if 判断,则显得繁琐…...

css--浮动
一. 浮动的简介 在最初,浮动是用来实现文字环绕图片效果的,现在浮动是主流的页面布局方式之一。 二. 元素浮动后的特点 🤢脱离文档流。😊不管浮动前是什么元素,浮动后:默认宽与高都是被内容撑开࿰…...

基于有限状态机开发健壮的Nodejs/TCP客户端
有限状态机是一种数学计算模型,它描述了在任何给定时间只能处于一种状态的系统的行为。形式上,有限状态机有五个部分: 初始状态值 (initial state)有限的一组状态 (states)有限的一组事件 (events)由事件驱动的一组状态转移关系 (transition…...