概述
Arduino
- 一、模块使用
- 1.DFPlayer Mini MP3音乐播放模块
- 2.舵机
- 3.L298N
- 1.无调速功能
- 2.加上调速功能
- 5.OLED0.96
- 6.SYN6288
- 7.SU-03T语音模块(串行通讯)
- 8.sim800c模块(串行通讯)
- 二、函数,库....
- 1.字符串操作函数(太牛逼了,强烈推荐,给爷好好学!!!!!!!!)
- 2、串口接收字符串
- 2.1接受16进制数
- 3.软串口冷知识
- 多个软串口怎么用?###很重要
- 4.millis()函数
- 4.1
- 5.按键消抖(状态机)
- 6、10进制转16进制
- 三、ESP8266+BILNKER
- 1、配置环境
- 2、添加设备
- 3、arduino程序编写以及上传
- 4.常用模式
- 4.json
- 1.UDP接收字符并解析
一、模块使用
1.DFPlayer Mini MP3音乐播放模块
接线图,注意*在TX,RX与MP3模块的RX,TX之间连一个1k电阻。因为DFPlayer Mini模块工作电压应该是3.3V,而主控板传入电压为5V,因此需要1K左右电阻分压。*
内存卡文件配置,非常重要!!!!!!!
注意:文件夹命名需要是mp3,放置在SD卡根目录下,而mp3文件命名需要是4位
数字,例如"0001.mp3",放置在mp3文件夹下。 如需中英文命名,可以添加在
数字后,例如"0001hello.mp3"或者"0001后来.mp3"。
例如:
一定是要有延时要不然播放不完整!!!!!!!!
代码块:
代码:
/*!
* MindPlus
* uno
*
*/
#include <DFRobot_PlayerMini.h>
#include <SoftwareSerial.h>
// 创建对象
DFRobot_PlayerMini mp3;
SoftwareSerial softSerialmp3(2, 3);
// 主程序开始
void setup() {
mp3.begin(&softSerialmp3);
mp3.volume(100);
mp3.start();
}
void loop() {
mp3.playMp3Folder(1);
delay(5000);
}
2.舵机
有PWM功能引脚才能用!!!!!!
程序贴在这里了
#include <Servo.h>
#define PIN_SERVO 10
Servo myservo;
void setup()
{
myservo.attach(PIN_SERVO);
}
void loop()
{
myservo.write(0);
delay(1000);
myservo.write(80);
delay(1000);
myservo.write(160);
delay(1000);
myservo.write(80);
delay(1000);
myservo.write(0);
delay(1000);
}
3.L298N
1.无调速功能
这个写的很好
但是没有调速功能。小白先实现这个吧。
//LingShun Lab
int input1 = 5; // 定义uno的pin 5 向 input1 输出
int input2 = 6; // 定义uno的pin 6 向 input2 输出
int input3 = 9; // 定义uno的pin 9 向 input3 输出
int input4 = 10; // 定义uno的pin 10 向 input4 输出
void setup() {
// Serial.begin (9600);
//初始化各IO,模式为OUTPUT 输出模式
pinMode(input1,OUTPUT);
pinMode(input2,OUTPUT);
pinMode(input3,OUTPUT);
pinMode(input4,OUTPUT);
}
void loop() {
//forward 向前转
digitalWrite(input1,HIGH); //给高电平
digitalWrite(input2,LOW); //给低电平
digitalWrite(input3,HIGH); //给高电平
digitalWrite(input4,LOW); //给低电平
delay(1000); //延时1秒
//stop 停止
digitalWrite(input1,LOW);
digitalWrite(input2,LOW);
digitalWrite(input3,LOW);
digitalWrite(input4,LOW);
delay(500); //延时0.5秒
//back 向后转
digitalWrite(input1,LOW);
digitalWrite(input2,HIGH);
digitalWrite(input3,LOW);
digitalWrite(input4,HIGH);
delay(1000);
}
2.加上调速功能
先看这个吧
void setup() {
Serial.begin(115200);
//初始化各IO,模式为OUTPUT 输出模式
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
//默认电机停止转动,全部设为低电平
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
analogWrite(9,255);//左轮速运行
analogWrite(10,250);//右轮速运行
}
void loop() {
if (Serial.available() > 0)
{
Serial.println(char(Serial.read()))
if(char(Serial.read())=='a'){a1();}
if(char(Serial.read())=='b'){a2();}
if(char(Serial.read())=='c'){a3();}
if(char(Serial.read())=='d'){a4();}
if(char(Serial.read())=='e'){a5();}
if(char(Serial.read())=='f'){a6();}
if(char(Serial.read())=='g'){a7();}
if(char(Serial.read())=='i'){a8();}
delay(2);
}
//forward 前进
}
viod a1()//左上
{
}
viod a2()
{
}
viod a3()
{
}
viod a4()
{
}
viod a5()
{
}
viod a6()
{
}
viod a7()
{
}
viod a8()
{
}
5.OLED0.96
#include <SPI.h> // 加载SPI库
#include <Wire.h> // 加载Wire库
#include <Adafruit_GFX.h> // 加载Adafruit_GFX库
#include <Adafruit_SSD1306.h> // 加载Adafruit_SSD1306库
// 定义 OLED屏幕的分辨率
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
void setup() {
Serial.begin(9600); // 设置串口波特率
Serial.println("OLED FeatherWing test"); // 串口输出
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 设置OLED的I2C地址
display.clearDisplay(); // 清空屏幕
display.setTextSize(1); // 设置字体大小
display.setTextColor(SSD1306_WHITE); // 设置字体颜色
display.setCursor(0,0); // 设置开始显示文字的坐标
display.println("Hello World!"); // 输出的字符
display.println(" by Lingshunlab.com");
display.display(); // 使更改的显示生效
}
void loop() {
}
6.SYN6288
https://zhuanlan.zhihu.com/p/66314323/
arduino要转字符类型,GB2312
1.先转码
https://www.107000.com/T-Hex/
char Chinese_1[50] = {0xB2,0xBB,0xD4,0xDA,0xB4,0xF2,0xBF,0xA8,0xCA,0xB1,0xBC,0xE4,0xB7,0xB6,0xCE,0xA7,0x00};//不在打卡时间范围
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
delay(1000);
//SYN_FrameInfo(0,Chinese_GB2312);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(Chinese_1);
delay(4000);
}
7.SU-03T语音模块(串行通讯)
const byte b1[]={0XAA,0X55,0X01,0X01,0X55,0XAA};
const byte b2[]={0XAA,0X55,0X02,0X02,0X55,0XAA};
const byte b3[]={0XAA,0X55,0X03,0X03,0X55,0XAA};
const byte b4[]={0XAA,0X55,0X04,0X04,0X55,0XAA};
const byte b5[]={0XAA,0X55,0X05,0X05,0X55,0XAA};
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.write(b1,(sizeof(b1) / sizeof(b1[0])))
}
void loop() {
// put your main code here, to run repeatedly:
}
8.sim800c模块(串行通讯)
void sendMeg()
{
Serial.println("AT");
delay(3000);
Serial.println("AT+CMGF=1");
delay(4000);
Serial.println("AT+CMGS="18953474779"");//这里改成你的号码 "转义
delay(4000);
Serial.print("fire");//这里写内容
delay(4000);
Serial.write(0x1A);//发送:0x1A,即“CTRL+Z”的键值,用于告诉 Serial,要执行发送操作
//发送: 0x1B,即“ESC”的键值,用于告诉 Serial,取消本次操作,不执行发送。
}
二、函数,库…
1.字符串操作函数(太牛逼了,强烈推荐,给爷好好学!!!!!!!!)
先贴出来原链接:https://www.cnblogs.com/1996jiwei/p/6666818.html
String.h库函数 贴出来两个比较常用的吧!
1.寻找字符串第几个
str.charAT(n)
描述
获取字符串的第n个字符
参数
n :是一个索引,作为下标
2.截取字符串
描述
用来截取字符串中间的某一位置。另外是决定那里结束
用法:
string1.substring(from); //返回 from 之后的
string1.substring(from,to); //返回 from 和 to 之间的
参数:
string1:原本的字符串
from:要截取的字符串从第几个字开始。
to:要截取后面的第几个字
3.实战
#include "String.h"
String a_1,a_2,S;
void setup()
{
Serial.begin(9600);//打开串口,设置波特率9600
a_1 = "hello";
}
void loop()
{
S = a_1.charAt(3); //取对象里面的方法charAt
a_2=a_1.substring(0,3);
Serial.print(a_2);
Serial.println();//输出换行符
delay(200);
}
2、串口接收字符串
String comdata = "";
void setup()
{
Serial.begin(9600);
}
void loop()
{
while (Serial.available() > 0)
{
comdata += char(Serial.read());
delay(2);
}
if (comdata.length() > 0)
{
Serial.println(comdata);
comdata = "";
}
}
2.1接受16进制数
只需要直接int就可以
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{
Serial.println(int(Serial.read()));
delay(2);
}
}
3.软串口冷知识
除HardwareSerial外,Arduino还提供了SoftwareSerial类库,它可以将你的其他数字引脚通过程序模拟成串口通信引脚。
通常我们将Arduino UNO上自带的串口称为硬件串口,而使用SoftwareSerial类库模拟成的串口,称为软件模拟串口(简称软串口)。
在Arduino UNO上,提供了0(RX)、1(TX)一组硬件串口,可与外围串口设备通信,如果要连接更多的串口设备,可以使用软串口。
软串口是由程序模拟实现的,使用方法类似硬件串口,但有一定局限性:在Arduino UNO MEGA上部分引脚不能被作为软串口接收引脚,且软串口接收引脚波特率建议不要超过57600。
#include <SoftwareSerial.h>
//实例化软串口
SoftwareSerial mySerial(2, 3); // RX, TX
void setup()
{
Serial.begin(115200);
while (!Serial) {
}
Serial.println("Goodnight moon!");
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop()
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
多个软串口怎么用?###很重要
当需要连接多个串口设备时,可以建立多个软串口,但限于软串口的实现原理,Arduino UNO只能同时监听一个软串口,当存在多个软串口设备时,你需要使用listen() 函数指定需要监听的设备。如程序中存在portOne、portTwo两个软串口对象时,你欲监听portOne,便需要使用portOne.listen() 语句,要切换监听port2,便使用portTwo.listen() 语句。
示例程序如下:
/*
Arduino UNO软串口通信
通过listen()切换监听软串口
*/
#include <SoftwareSerial.h>
SoftwareSerial portOne(10, 11);
SoftwareSerial portTwo(8, 9);
void setup() {
Serial.begin(9600);
while (!Serial) {
}
portOne.begin(9600);
portTwo.begin(9600);
}
void loop() {
//监听1号软串口
portOne.listen();
Serial.println("Data from port one:");
while (portOne.available() > 0) {
char inByte = portOne.read();
Serial.write(inByte);
}
Serial.println();
//监听2号软串口
portTwo.listen();
Serial.println("Data from port two:");
while (portTwo.available() > 0) {
char inByte = portTwo.read();
Serial.write(inByte);
}
Serial.println();
}
4.millis()函数
unsigned long previousMillis;
int ledState;
void setup() {
// put your setup code here, to run once:
pinMode(LED_BUILTIN, OUTPUT);
}
void ledBlink( int ledPin, uint32_t period )
{
unsigned long currentMillis = millis(); /* 记录当前时间 */
if ( currentMillis - previousMillis >= period ) /* 检查 "period" ms是否通过 */
{
ledState = digitalRead( ledPin );
previousMillis = currentMillis; /* 保存上次闪烁LED时 */
if ( ledState == LOW ) /* 如果LED关闭,则打开,反之亦然 */
{
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite( ledPin, ledState ); /* LED为ledState状态 */
}
}
void loop() {
// put your main code here, to run repeatedly:
ledBlink(LED_BUILTIN,500);
}
/* 利用millis()函数做成闪灯效果的函数 */
4.1
unsigned long previousMillis;
int ledState;
int a=1;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
void ledBlink(uint32_t period )
{
unsigned long currentMillis = millis(); /* 记录当前时间 */
if ( currentMillis - previousMillis >= period ) /* 检查 "period" ms是否通过 */
{
a=a*-1;
if (a==1){Serial.println("1");}
if (a==-1){Serial.println("-1");}
previousMillis = currentMillis; /* 保存上次闪烁LED时 */
}
}
void loop() {
// put your main code here, to run repeatedly:
ledBlink(500);
}
5.按键消抖(状态机)
https://blog.csdn.net/hp150119/article/details/114358170
#include <Bounce2.h>
int BUTTON_PIN = 32;//按钮连接的针脚
Bounce2::Button button = Bounce2::Button();//实例化一个抖动对象
int ledState = LOW;
void setup() {
button.attach( BUTTON_PIN, INPUT_PULLUP);
button.interval(5);//间隔是5ms
Serial.begin(9600);//用于串口输出
}
void loop() {
button.update();//更新
if ( button.pressed() ) {
Serial.println("按下了");
}
}
6、10进制转16进制
long decimalToHex_big(long decimal)
{
long hex = 0;
int i = 0;
char temp_buff[20];
sprintf(temp_buff, "%lX", decimal);//换为字符串的16进制
//根据字符串长度一直转换
for( i =0 ; temp_buff[i] != '