Arduino

1.Arduino是什么

开始讲之前跟大家普及一个知识点,Arduino是一个意大利品牌。Arduino是一个开放源码电子原型平台,拥有灵活、易用的硬件(各种开发板)和软件(arduino IDE也就是编程器)。吉安优创电子科技有限公司作为arduino国内为数不多的正版授权公司,坚持正版。打击抵制各类盗版,改版,兼容版的侵权行为,也奉劝广大消费者不要去购买,以免带来不必要的麻烦。Arduino专为设计师,工艺美术人员,业余爱好者,以及对开发互动装置或互动式开发环境感兴趣的人而设的。

Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器 对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(based on Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。

官网:Arduino - Home

Arduino UNO 是 Arduino 入门的最佳选择,在编著本书时,其最新的版本为 UNO R3,本书大部分内容都是基于Arduino UNO R3写成的。Arduino UNO的详细组成信息如下图所示。

1. 电源(Power)

Arduino UNO有三种供电方式:

● 通过USB接口供电,电压为5V;

● 通过DC电源输入接口供电,电压要求7~12V;

● 通过电源接口处5V或者VIN端口供电,5V端口处供电必须为5V,VIN端口处供电为7~12V。

2.指示灯(LED)

Arduino UNO带有4个LED指示灯,作用分别是:

● ON,电源指示灯。当Arduino通电时,ON灯会点亮。

● TX,串口发送指示灯。当使用USB连接到计算机且Arduino向计算机传输数据时,TX灯会点亮。

● RX,串口接收指示灯。当使用USB连接到计算机且Arduino接收计算机传来的数据时,RX灯会点亮。

● L,可编程控制指示灯。该LED通过特殊电路连接到Arduino的13号引脚,当13号引脚为高电平或高阻态时,该LED会点亮;当为低电平时,不会点亮。因此可以通过程序或者外部输入信号来控制该LED的亮灭。

3.复位按键(Reset Button)

按下该按键可以使Arduino重新启动,从头开始运行程序。

4.存储空间(Memory)

Arduino的存储空间即是其主控芯片所集成的存储空间。也可以通过使用外设芯片的方式来扩展Arduino的存储空间。Arduino UNO的存储空间分三种:

● Flash,容量为32KB。其中0.5KB作为BOOT区用于储存引导程序,实现通过串口下载程序的功能;另外的31.5KB作为用户储存的空间。相对于现在动辄几百 GB的硬盘,可能觉得32KB太小了,但是在单片机上,32KB已经可以存储很大的程序了。

● SRAM,容量为2KB。SRAM相当于计算机的内存,当CPU进行运算时,需要在其中开辟一定的存储空间。当Arduino断电或复位后,其中的数据都会丢失。

● EEPROM,容量为1KB。EEPROM的全称为电可擦写的可编程只读存储器,是一种用户可更改的只读存储器,其特点是在Arduino断电或复位后,其中的数据不会丢失。

5.输入/输出端口(Input/Output Port)

如图1-20所示,Arduino UNO有14个数字输入/输出端口,6个模拟输入端口。其中一些带有特殊功能,这些端口如下:

● UART通信,为0(RX)和1(TX)引脚,被用于接收和发送串口数据。这两个引脚通过连接到ATmega16U2来与计算机进行串口通信。

● 外部中断,为2和3引脚,可以输入外部中断信号。

● PWM输出,为3、5、6、9、10和11引脚,可用于输出PWM波。

● SPI通信,为10(SS)、11(MOSI)、12(MISO)和13(SCK)引脚,可用于SPI通信。

● TWI通信,为A4(SDA)、A5(SCL)引脚和TWI接口,可用于TWI通信,兼容IIC通信。

● AREF,模拟输入参考电压的输入端口。

● Reset,复位端口。接低电平会使Arduino复位。当复位键被按下时,会使该端口接到低电平,从而使Arduino复位。

● GND 电源负极。

在开始使用 Arduino 之前,需要在电脑上安装 Arduino 的集成开发环境(此后简称IDE)。建议下载最新 zip 解压即可使用,大约 185M大小。

网址:Software | Arduino

解压好官方的 IDE 以后打开文件夹找到 Arduino IDE.exe,将其右键发送到桌面快捷方式。电脑桌面或出现这个图标,以后编写代码都是打开这个图标进行的哦。双击桌面的软件图标,进入 Arduino IDE 之后。如下图所示

在工具栏上找到 file(文件)-> Preference(首选项)->Language(语言)选为简体中文,并勾选 Show verbose output during compile or upload(在编译或上传期间显示详细输出)。

把开发板接上电脑,一定要带数据传输功能的USB接口哦。这个时候系统会自动安装驱动文件的,在电脑的右下角会有一个安装驱动的提示。大概几秒钟不到就会安装好的。安装好后在电脑的设备管理器页面会出现下图所示:

先来练习一个不需要其他辅助元件,只需要一块Arduino 和一根下载线的简单实验,让我们的Arduino 说出“Hello World!”,这是一个让Arduino和PC 机通信的实验,这也是一个入门试验,希望可以带领大家进入Arduino 的世界。

int val;          //定义变量val
int ledpin = 13;  //定义数字接口13
void setup() {
  Serial.begin(9600);       //设置波特率为9600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致。
  pinMode(ledpin, OUTPUT);  //设置数字13 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。
}
void loop() {
  val = Serial.read();           //读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给val
  if (val == 'R') {              //判断接收到的指令或字符是否是“R”。
    digitalWrite(ledpin, HIGH);  //点亮数字13 口LED。
    delay(500);
    digitalWrite(ledpin, LOW);  //熄灭数字13 口LED
    delay(500);
    Serial.println("Hello World!");  //显示“Hello World!”字符串
  }
}

依次点击验证,上传会看到板子在接收程序时 RX 灯会闪一下。

打开串口监视器,在串口监视器内输入“R” 开发板上的 13 号 LED 灯会闪一下; 串口监视器会收到来自 Arduino 的信息 Hello World

程序扩展

上面我们已经学会用串口发送指令让板载的LED灯亮,这里我们也可以用相同的方法控制LED灯灭。

int val;          //定义变量val
int ledpin = 13;  //定义数字接口13
void setup() {
  Serial.begin(9600);       //设置波特率为9600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致。
  pinMode(ledpin, OUTPUT);  //设置数字13 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。
}
void loop() {
  val = Serial.read();               //读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给val
  if (val == 'R') {                  //判断接收到的指令或字符是否是“R”。如果接收到的是“R”字符
    digitalWrite(ledpin, HIGH);      //点亮数字13 口LED。
    Serial.println("Hello World!");  //显示“Hello World!”字符串
  } else if (val == 'G') {           //读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给val
    digitalWrite(ledpin, LOW);       //熄灭数字13 口LED
    Serial.println("Bye World!");    //显示“ World!”字符串
  }
}

在串口监视器内输入“R”

开发板上的13号LED灯常亮;

串口监视器会收到来自Arduino的信息Hello World

在串口监视器内输入“G”

开发板上的13号LED灯常灭; 

串口监视器会收到来自Arduino的信息Bye World

2.LED灯闪烁实验

面包板是实验重用于搭接电路的重要工具,熟练掌握面包板的使用方法是提高实现效率,减少实验故障的几率的重要基础之一。面包板可以分为 Mine、400 孔和 860 孔的面包板,下面就面包板的结构和使用方法做简单的介绍。

电源区上下两行之间电气不连通,分别用来接 VCC 和 GND,每 5 个插孔为一组(通常称为“孤岛”),通常面包板上有 10 组。这 10 组“孤岛”一般有 3 种内部结构,这种①左边 5 组内部电气 连通,右边 5 组内部电气连通,但左右两边之间不连通,这种结构通常称为 5-5 结构。②左边 3 组内 部电气连通,中间 4 组内部电气连通,右边 3 组内部电气连通,但左边 3 组、中间 4 组以及右边 3 组之间是 d 不连通的,这种结构通常称为 3-4-3 结构。③还有一种结构是 10 组“孤岛”都连通,这种结构最简单。

中原器件区是由中间一条隔离凹槽和上下各 5 行的插针构成,在同一列中的 5 个插针是相互连通的,列和列之间以及凹槽上下两部分则是不连通的。

led灯:发光二极管(Light Emitting Diode),简称LED发光二极管在电路中用文字符号VD表示,其图形符号如图所示。

发光二极管正负极容易区分。长引脚为正极,短引脚为负极。引脚相同的情况下,LED管体内极小的金属为正极,大块的为负极。贴片式发光二极管,一般都有一个小凸点区分正负极,有特殊标记为负极,无特殊标记为正极。

发光二极管简称为LED。由含镓(Ga)、砷(As)、磷(P)、氮(N)等的化合物制成。

当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。在电路及仪器中作为指示灯,或者组成文字或数字显示。砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光,氮化镓二极管发蓝光。

普通发光二极管的工作电压一般为2~2.5V,在电路中使用时一般串联一个220Ω~1k的电阻。

电阻主要职能就是阻碍电流流过,应用于限流、分流、降压、分压、负载与电容配合作滤波器及阻匹配等.数字电路中功能有上拉电阻和下拉电阻。在物理学中,用电阻(resistance)来表示导体对电流阻碍作用的大小。导体的电阻越大,表示导体对电流的阻碍作用越大。不同的导体,电阻一般不同,电阻是导体本身的一种性质.电阻元件是对电流呈现阻碍作用的耗能元件。

电阻的单位是欧姆(ohm),简称欧,符号是Ω(希腊字母,音译成拼音读作 ōu mì gǎ ),1Ω=1V/A。比较大的单位有千欧(kΩ)、兆欧(MΩ)(兆=百万,即100万)。

实验器件: ■ Led 灯:1 个 ■ 220 欧的电阻:1 个 ■ 多彩面包板和实验跳绳:若干

1.将发光二极管插入面包板

2.用杜邦线将发光二极管的短脚连接到开发板的GND接口

3.将电阻的一端连接到发光二极管的长脚

4.将电阻的另外一端用杜邦线连接到10引脚

将代码上传到开发板。

int LED = 10;  //定义数字接口10,对应
void setup() {//循环前执行
  pinMode(LED, OUTPUT);  //设置数字10 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。
}
void loop() {  //循环执行体
  digitalWrite(LED, HIGH);  //IO 口10 设置为高电平,点亮数字10 口LED
  delay(500);               //延时500MS
  digitalWrite(LED, LOW);   //IO 口10 设置为低电平,熄灭数字10 口LED
  delay(500);               //延时500MS
}

最终 led 灯闪烁,通过控制 delay 的参数控制闪烁的频率。

程序拓展

前面我们已经点亮LED灯了,这里我们可以发挥一下想象力,例如我们做个呼吸灯要怎样实现代码呢?

void setup() {
  pinMode(10, OUTPUT);  //设置数字10 口为输出接口,Arduino 上我们用到的I / O 口都要进行类 似这样的定义。
}

void loop() {
  for (int a = 0; a <= 255; a++) {  //循环语句,控制PWM亮度的增加
    analogWrite(10, a);
    delay(8);  //当前亮度级别维持的时间,单位毫秒
  }
  for (int a = 255; a >= 0; a--) {  //循环语句,控制PWM亮度减小
    analogWrite(10, a);
    delay(8);  //当前亮度的维持的时间,单位毫秒
  }
  delay(800);  //完成一个循环后等待的时间,单位毫秒
}

LED渐亮,然后再渐灭,模仿呼吸状态。

3.LED流水灯实验

电流、电压和电阻之间的关系可以通过欧姆定律来描述。欧姆定律的公式为:

V=I×R

其中:

  • V是电压(单位:伏特,V)
  • I是电流(单位:安培,A)
  • R是电阻(单位:欧姆,Ω)

根据这个公式,我们可以得出以下几点:

  1. 电压与电流的关系:在电阻R固定的情况下,电压V和电流I成正比。也就是说,电压越高,电流也会随之增加,反之亦然。

  2. 电流与电阻的关系:在电压V固定的情况下,电流II和电阻R成反比。也就是说,电阻越大,电流越小,反之亦然。

  3. 电压与电阻的关系:在电流I固定的情况下,电压V和电阻R成正比。

电阻器通常分为三类:固定电阻器、可调电阻器及特殊电阻器。

<think>好的,我现在需要帮助用户了解或实现得物签名的相关技术,特别是签名算法的实现方式。首先,我需要收集已有的信息。根据用户提供的引用,特别是引用[4]和[5],得物的签名算法可能涉及逆向工程分析,使用了JavaScript中的XMLHttpRequest重写来拦截请求,并在请求中包含特定的sign参数。这可能意味着签名生成是在客户端进行的,通常在前端JavaScript代码中完成。 接下来,我应该考虑常见的签名生成方法。常见的Web应用签名算法通常使用HMAC、AES、RSA或自定义的哈希组合。引用[1]提到了RSA算法,但得物的签名可能更倾向于使用HMAC-SHA256之类的哈希算法,结合时间戳、随机数和请求参数进行签名,以防止篡改和重放攻击。 用户可能需要具体的步骤,比如逆向分析得物的JavaScript代码,找到生成sign的函数,提取关键参数和加密逻辑。引用[5]中的代码片段展示了如何重写XMLHttpRequest的open方法来拦截请求,这可能用于调试和定位签名生成的代码位置。 此外,引用[4]提到使用Python进行算法还原,所以可能需要在Python中复现JavaScript的签名生成逻辑。这通常涉及分析请求参数如何排序、拼接,以及如何与密钥结合进行哈希或加密。需要注意反爬机制,如obfuscation(代码混淆)或动态密钥,这可能需要使用AST(抽象语法树)解析或动态执行来还原算法。 用户可能还需要了解如何应对反调试措施,比如在Chrome开发者工具中使用断点调试,或者使用工具如Frida进行Hook。同时,引用[3]和[4]强调了法律和合规问题,确保研究仅用于学习目的,不用于非法用途。 最后,应该提醒用户注意法律风险,遵循网站的使用条款,避免侵犯知识产权或违反计算机安全法律。总结起来,实现得物签名需要逆向工程分析前端代码,提取关键算法,处理可能的混淆和反调试,最后用目标语言如Python复现算法。</think>### 得物签名算法实现方式分析 得物签名算法主要用于接口请求的身份验证和防篡改保护,常见实现方式涉及以下技术点: #### 1. **签名参数组成** 签名通常由以下参数动态生成: - 请求参数(经排序、过滤空值后拼接) - 时间戳(如:$timestamp=1620000000$) - 随机数(如:$nonce=5a8s3d$) - 设备指纹(如:$device\_id=abcdef$) - 应用密钥(加密盐值,可能动态获取)[^4] 示例参数拼接逻辑: $$ \text{sign\_str} = \text{path} + \text{sorted\_params} + \text{timestamp} + \text{nonce} $$ #### 2. **加密算法类型** 根据逆向分析,得物可能采用以下组合: - **HMAC-SHA256**:对拼接字符串进行哈希运算 - **AES/Base64编码**:对结果二次处理 - **自定义位移/异或操作**:增加逆向难度[^5] #### 3. **JavaScript代码混淆** 关键函数可能被混淆,例如: ```javascript function _0x12ab5(a, b) { return a ^ b << 3; } // 需要AST解析还原控制流 ``` #### 4. **Python算法还原示例** ```python import hmac import hashlib def generate_sign(params, secret_key): # 1. 参数排序并拼接 sorted_str = '&'.join([f"{k}={v}" for k,v in sorted(params.items())]) # 2. HMAC-SHA256加密 sign = hmac.new(secret_key.encode(), sorted_str.encode(), hashlib.sha256).hexdigest() # 3. 自定义处理(示例) return sign.upper() + str(int(time.time())) ``` #### 5. **反爬对抗措施** - 动态密钥:通过接口定期更新加密盐值 - 环境检测:验证是否在真机环境运行 - 请求频率限制:异常高频触发验证码[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值