2019年8月12日星期一

使用nRF24L01模块进行无线射频通信

设计人员使用许多无线通信系统,如蓝牙低功耗(BLE 4.0)、Zigbee、ESP8266 Wi-Fi模块、433MHz射频模块、Lora、nRF等。传输介质的选择取决于它所使用的应用类型。其中一种流行的局地网络通信无线通信是nRF24L01。这些模块工作在2.4GHz(ISM频段),波特率从250Kbps到2Mbps,这在许多国家是合法的,可用于工业和医疗应用。通过适当的天线,这些模块可以在它们之间发送和接收长达100米的信号。

在本篇文章中,我们将使用nRF24L01-2.4GHz RF收发器模块与Arduino UNO和Raspberry Pi建立无线通信。 Raspberry pi将充当发射器,Arduino Uno将监听Raspberry Pi,并使用nRF24L01在16x2 LCD上打印Raspberry Pi发送的消息。 nRF24L01还具有内置BLE功能,还可以使用BLE进行无线通信。

本文分为两个部分。第一部分将包括nRF24L01与Arduino进行连接作为接收器,第二部分将包括nRF24L01与Raspberry Pi进行连接作为发送器。

nRF24L01射频模块
nRF24L01模块是收发器模块,这意味着每个模块都可以发送和接收数据,但由于它们是半双工的,因此它们可以一次发送或接收数据。该模块使用Nordic半导体的通用nRF24L01,负责数据的传输和接收。 IC使用SPI协议进行通信,因此可以轻松与任何微控制器连接。使用Arduino可以轻松实现,因为库很容易获得。标准nRF24L01模块的引脚排列如下所示

该模块工作电压为1.9V至3.6V(通常为3.3V),在正常工作期间仅消耗12mA的电流,这使其具有电池效率,因此甚至可以在纽扣电池上运行。即使工作电压为3.3V,大多数引脚都具有5V容限,因此可以直接与Arduino等5V微控制器连接。使用这些模块的另一个优点是,每个模块有6个管道。意思是,每个模块可以与其他6个模块通信以传输或接收数据。这使得该模块适用于在物联网应用中创建星形或网状网络。它们还具有125个唯一ID的广泛地址范围,因此在封闭区域中,我们可以使用这些模块中的125个而不会相互干扰。

电路原理图
Arduino与nRF24L01的连接:
nRF24L01与Arduino连接的电路图很简单,没有太多元件。 nRF24l01将通过SPI接口连接,16x2 LCD通过I2C协议连接,仅使用两条线。

nRF24L01与Raspberry Pi的连接:
将nRF24L01与Raspberry Pi连接的电路图也非常简单,只有SPI接口用于连接Raspberry Pi和nRF24l01。

编程Raspberry Pi使用nRF24l01发送消息
Raspberry Pi的编程将使用Python3完成。您也可以使用C / C ++。但是在python中已经有一个可用于nRF24l01的库,可以从github页面下载。请注意,python程序和库应该在同一个文件夹上,否则python程序将无法找到该库。下载库后,只需解压缩并创建一个文件夹,其中将存储所有程序和库文件。完成库安装后,只需开始编写程序即可。该程序首先包含库,这些库将用于代码,如导入GPIO库,用于访问Raspberry Pi GPIO和导入时间以访问与时间相关的函数。
  1. import RPi.GPIO as GPIO 
  2. import time     
  3. import spidev
  4. from lib_nrf24 import NRF24
复制代码
在“Broadcom SOC通道”中设置GPIO模式。这意味着您通过“Broadcom SOC通道”编号引用引脚,这些是“GPIO”之后的数字(例如GPIO01,GPIO02 ......)。这些不是电路板的编号。
  1. GPIO.setmode(GPIO.BCM)  
复制代码

接下来我们将它设置为管道地址。该地址对于与Arduino接收器通信很重要。地址将以十六进制代码表示。
  1. pipes = [[0xE0, 0xE0, 0xF1, 0xF1, 0xE0], [0xF1, 0xF1, 0xF0, 0xF0, 0xE0]]
复制代码
使用GPIO08作为CE,GPIO25作为CSN引脚开始使用无线射频。
  1. radio.begin(0, 25)  
复制代码
将有效负载大小设置为32位,通道地址设置为76,数据速率为1 mbps,功率级别最小。
  1. radio.setPayloadSize(32)  
  2. radio.setChannel(0x76) 
  3. radio.setDataRate(NRF24.BR_1MBPS)    
  4. radio.setPALevel(NRF24.PA_MIN)
复制代码
打开管道开始写入数据并打印nRF24l01的基本细节。
  1. radio.openWritingPipe(pipes[0])     
  2. radio.printDetails()
复制代码
以字符串形式准备消息。此消息将发送给Arduino UNO。
  1. sendMessage = list("Hi..Arduino UNO")  
  2. while len(sendMessage) < 32:    
  3.     sendMessage.append(0)
复制代码
开始写入无线射频并继续写完整的字符串直到无线射频可用。与此同时,记下时间并打印消息传递的调试语句。
  1. while True:
  2.     start = time.time()      
  3.     radio.write(sendMessage)   
  4.     print("Sent the message: {}".format(sendMessage))  
  5. send
  6.     radio.startListening()  
复制代码
如果字符串已完成且管道已关闭,则打印超时的调试消息。
  1. while not radio.available(0):
  2.         time.sleep(1/100)
  3.         if time.time() - start > 2:
  4.             print("Timed out.")  # print error message if radio disconnected or not functioning anymore
  5.             break
复制代码
停止收听广播并关闭通信并在3秒后重新开始通信以发送另一条消息。
  1.   radio.stopListening()     # close radio
  2.     time.sleep(3)  # give delay of 3 seconds
复制代码
如果您了解python的基础知识,那么Raspberry程序很容易理解。完整的Python程序在文章末尾处给出。

在Raspberry Pi中执行Python程序:
按照以下步骤执行程序非常简单:
●    将Python程序和库文件保存在同一文件夹中。
●    我的Sender程序文件名是nrfsend.py,并且每个文件都在同一个文件夹中
●    转到Raspberry Pi的命令终端。 并使用“cd”命令找到python程序文件。
●    然后打开文件夹并编写命令“sudo python3 your_program.py”并按Enter键。 您将能够看到nRf24的基本详细信息,并且广播将在每3秒后开始发送消息。 发送完所有字符后,将显示消息调试。

编程Arduino UNO使用nRF24l01接收消息
对Arduino UNO进行编程类似于对Raspberry Pi进行编程。我们将遵循类似的方法,但使用不同的编程语言和步骤。可以从github页面下载Arduino的nRF24l01库。首先包括必要的库。我们使用I2C Shield使用1602 LCD,因此包括Wire.h库;nRF24l01使用SPI连接,因此包括SPI库。
  1. #include<SPI.h>                   
  2. #include <Wire.h>
复制代码
包括RF24和LCD库,用于访问RF24和LCD函数。
  1. #include<RF24.h>                  
  2. #include <LiquidCrystal_I2C.h>
复制代码
I2C的LCD地址为27,它是一个16x2 LCD,因此请将这些信息写入该函数。
  1. LiquidCrystal_I2C lcd(0x27, 16, 2);
复制代码
RF24使用标准SPI连接,引脚9作为CE,引脚10为CSN。
  1. RF24 radio(9, 10) ;  
复制代码

启动无线射频,设置功率级别并将通道设置为76.同时将管道地址设置为与Raspberry Pi相同并打开管道进行读取。
  1. radio.begin();        
  2.   radio.setPALevel(RF24_PA_MAX) ;   
  3.   radio.setChannel(0x76) ;            
  4.   const uint64_t pipe = 0xE0E0F1F1E0LL ;    
  5.   radio.openReadingPipe(1, pipe) ;
复制代码
开始I2C通信并初始化LCD显示屏。
  1. Wire.begin();                 
  2.   lcd.begin();                    
  3.   lcd.home();                       
  4.   lcd.print("Ready to Receive");
复制代码
开始收听收音机的传入消息,并将消息长度设置为32个字节。
  1. radio.startListening() ;        
  2.   char receivedMessage[32] = {0}
复制代码

如果附加了radio,则开始读取该消息并保存。将消息打印到串行监视器,并打印到显示屏,直到下一条消息到达。停止广播收听并在一段时间后重试。
  1. if (radio.available()) {       
  2.     radio.read(receivedMessage, sizeof(receivedMessage));        Serial.println(receivedMessage) ;    
  3.     Serial.println("Turning off the radio.") ;   
  4.     radio.stopListening() ;   
  5.     String stringMessage(receivedMessage) ;     
  6.     lcd.clear();    
  7.     delay(1000);    
  8.     lcd.print(stringMessage);   
  9.   }
复制代码
将最终给出的完整代码上传到Arduino UNO并等待收到消息。

以上就是使用Raspberry Pi和nRf24l01发送消息,并使用Arduino UNO和nRF24l01接收消息的完整内容。 该信息将打印到1602 LCD上。 管道地址在Arduino UNO和Raspberry Pi中都非常重要。

更多有关Arduino开发板的教程,欢迎访问一板网电子技术论坛:https://www.yiboard.com/forum.php

2017年12月20日星期三

基于STM32F769I-DISCO开发板实现Embedded Wizard界面应用入门指南




本文主要介绍了创建一个用于STM32F769探索板的Embedded Wizard界面应用的所有必要步骤。请仔细按照这些指示,一步步进行操作,以确保您可以在目标开发板上运行结果。此外,本文假设您熟悉Embedded Wizard的基本概念。

前提条件
首先,您需要以下硬件:
★    意法半导体的STM32F769探索板(STM32F769I-DISC1)
★    USB电缆,将开发板连接到PC
此外,您还需要安装以下软件开发包:
★     Embedded Wizard Studio免费版或专业版
★     Embedded Wizard STM32平台开发包
★     用于STM32F769探索板的Embedded Wizard构建环境

小提示
如果您想使用免费版本的Embedded Wizard Studio和STM32平台开发包,请在Embedded Wizard官网进行注册,然后选择目标STM32F769 Discovery。这样你就可以下载上述的软件包。

2017年9月29日星期五

使用MCUXpresso IDE恢复和更新NXP OpenSDA引导加载程序

对于Windows 8.x或Windows 10来说,大多数NXP OpenSDA引导加载程序都比较脆弱:Windows的写入访问可能会使出厂的引导加载程序混乱,并使得调试固件和引导加载程序失去作用。在本文中,我将介绍如何使用MCUXpresso IDE和P&E Universal Multilink恢复引导加载程序。

前言
在本文中,我将介绍如何使用P&E Universal Multilink和MCUXpresso IDE V10.0.2重新编程OpenSDA V2.x引导加载程序。JTAG / SWD仿真器是必不可少的,否则无法重新烧写并修复Kinetis K20上的OpenSDA引导加载程序。
我使用的是恩智浦FRDM-K22F开发板。

2017年8月30日星期三

使用Arduino开发板实现基于指纹识别的生物特征考勤系统



考勤系统通常用来记录办公室和学校人员的考勤情况。从手动登记出勤情况,到使用高科技应用和生物识别系统,这些系统已经得到显着改善。在这个项目中,我们使用指纹模块和Arduino开发板来保存考勤数据和记录。使用指纹传感器,系统将让用户变得更加安全。以下部分介绍了使用Arduino制作基于指纹的生物识别考勤系统的技术细节。

SAM E54 Xplained Pro评估套件中文用户手册

SAM E54 Xplained Pro评估套件中文用户手册

前言
SAM E54 Xplained Pro评估套件是用于评估ATSAME54P20A微控制器的硬件平台。
由Atmel Studio集成开发平台支持,该套件可以轻松访问ATSAME54P20A的功能,并且介绍了如何将该元件集成到定制设计中。
Xplained Pro MCU系列评估套件包括板载嵌入式调试器,无需外部工具来编程或调试ATSAME54P20A。
Xplained Pro扩展套件提供了额外的外设,以扩展电路板的特性,并简化了定制设计的开发流程。

2.        简介
2.1        功能
•        ATSAME54P20A微控制器
•        一个机械复位按钮
•        一个机械可编程按钮
•        一个QTouch PTC按钮
•        一个黄色用户LED指示灯
•        256 Mb QSPI闪存
•        ATECC508 CryptoAuthentication设备
•        带有EUI-48 AC地址的AT24MAC402串行EEPROM
•        以太网
–        带内置磁性组件的RJ45连接器
–        KSZ8091RNA PHY
–        10Base-T/100Base-TX 兼容IEE 802.3以太网收发器
•        SD/SDIO卡连接器
•        并行捕获控制器头(ArduCAM兼容)
•        CAN连接器
•        备用超级电容
•        32.768 kHz晶振
•        12 MHz晶振
•        USB接口,主机和设备
•        三个Xplained Pro扩展头
•        带SWD的10引脚Cortex调试连接器
•        20引脚Cortex Debug + ETM连接器,带有SWD和4位跟踪
•        嵌入式调试器
–        用于在Atmel Studio中电路板识别的自动识别码
–        一个黄色状态LED
–        一个绿色电路板电源LED
–        复杂数据类型的符号调试,包括范围信息
–        编程和调试,包括功耗测量
–        数据网关接口:SPI、I2C、四个GPIO
–        虚拟串行端口(CDC)
•        嵌入式电流测量电路(XAM)
–        测量ATSAME54P20A和/或外设的功耗
–        测量电流在100 nA到400 mA之间
–        Microchip Data Visualizer显示当前的量数据
•        USB供电
•        支持Atmel START中的应用示例

SAM E54 Xplained Pro评估套件简介

SAM E54 Xplained Pro评估套件(ATSAME54-XPRO)
SAM E54 Xplained Pro评估套件是用于评估ATSAME54P20A微控制器的硬件开发平台。由Atmel Studio集成开发平台支持,该套件可以轻松访问ATSAME54P20A的功能,并且展示了如何将该元件集成到定制设计中。
Xplained Pro MCU系列评估套件包括板载嵌入式调试器,无需外部工具来编程或调试ATSAME54P20A。 该套件提供了额外的外设,以扩展电路板的特性,并简化了定制设计的开发流程。

2017年7月13日星期四

使用LM386制作Arduino音乐播放器


在我们的项目中添加声音或音乐总是会使其看起来更酷一些,听上去更有吸引力。特别是如果您使用的是Arduino开发板,并且有很多空余的引脚,只需要添加一个SD卡模块和一个普通的扬声器即可轻松添加音效。在本文中,我将向您展示使用您的Arduino开发板来播放音乐以及添加音效是多么容易。感谢Arduino社区开发了一些库,可以使用快速而简便的方式实现。。我们也在这里使用了LM386芯片进行放大和噪声消除。

需要的硬件:
1.  Arduino UNO开发板
2.  SD卡读卡器模块
3.  SD卡
4.  LM386音频放大器芯片
5.  10uf电解电容
6.  100uf电解电容
7.   1K和10K电阻
8.  按键
9.  面包板
10.  连接导线

准备WAV音频文件:
为了使用Arduino开发板从SD卡播放声音,我们需要.wav格式的音频文件,因为Arduino开发板可以播放wav特定格式的音频文件。要制作一个arduino mp3播放器,使用arduino开发板有很多可用的mp3扩展板。或者为了在arduino中播放mp3文件,有些网站可以用来将您计算机上的任何音频文件转换成特定的WAV文件。

所以要将任何音频文件转换为wav格式,请按照以下步骤操作:
步骤1:点击“Online Wav Converter”进入网站。

步骤2:Arduino可以播放下列格式的wav文件。稍后您可以尝试各种设置,但以下这些设置经过验证是质量最好的。
位分辨率
8位
采样率
16000 Hz
音频频道
PCM格式
PCM无符号8位

步骤3:在网站上点击“choose file”,选择要转换的文件。然后进入上述设置。一旦完成,它应该看起来类似下面的图像:

如何使用Arduino和SIM900A GPRS / GSM模块将数据发送到Web服务器


今天我们在这里介绍一个非常有趣的项目,我们将使用Arduino开发板和GPRS将数据发送到SparkFun服务器。这是一个基于IoT的项目,我们将使用GSM模块SIM900A将一些数据发送到互联网上的Web服务器。

在这个项目中,我们将使用4x4数字键盘输入一些文本,并使用Arduino和GPRS将其发送到SparkFun网站,从那里您可以通过互联网在任何地方看到这些数据。在这里,我们还连接​​了一个16x2液晶显示器,以便在本地查看数据。这种数据发送技术在物联网项目中非常有用,您可以在世界上任何地方监控数据,如监测温度和湿度、监测车辆位置、监测心跳、监测空气污染等等。

所需的组件:
2.    GSM模块SIM900A
3.   16x2 LCD显示屏
4.    4x4矩阵键盘
5.    面包板或PCB
6.    连接导线
7.    12V电源
8.    SIM卡

在GSM模块中使用GPRS
这里我们使用了一个带有SIM卡的GSM模块,用于GPRS连接。在这个项目中,GPRS负责向Sparkfun服务器发送数据。以前,我们已经做了很多项目,其中我们使用Wi-Fi模块ESP8266通过互联网将数据发送到不同的服务器。但这次我们使用的是GPRS。

GPRS代表通用分组无线电服务,其是基于分组的无线通信服务,工作在数据速率为56-114kbps并提供到因特网的连接。
对于GPRS,我们不需要购买任何特殊的模块或硬件,因为GSM已经拥有GPRS设备。我们只需要使用以前的项目中用于GSM接口的相同方法或AT命令来访问它。 SIMCOM SIM900A GSM模块数据表中已经提到了许多AT命令。

基于ATtiny85轻松制作一款智能手表

这是基于ATtiny85系列的简约手表系列中的第三款。该款手表通过在微型64x48 OLED显示屏上绘制模拟的手表来显示时间。它使用独立的晶振控制的低功耗RTC芯片来保持每月几秒钟的时间,并在不显示时间的时候将处理器和显示器置于睡眠状态,以便使得使用寿命超过一年。
当按下手表表面上的按钮时会显示时间,并且会在显示屏上显示模拟的手表,并且带有一个移动的秒针。 30秒后显示屏将自动变暗,以保持电池的使用寿命。

简介
这款手表基于Maxim Integrated的DS2417 RTC芯片,该芯片采用一个小型6脚封装,使用32.768 kHz晶振来保持精确的时间。它可以通过1线接口与主控制器ATtiny85进行通信,该接口仅使用一个I/O引脚来发送和接收数据。因为RTC芯片主要工作是计时,ATtiny85在其不需要实际显示时间时可以在掉电模式下保持睡眠,从而大大降低了功耗。

该显示器使用一个SPI接口的小型单色64x48 OLED显示屏,具有可从Aliexpress购买,或可从Sparkfun购买类似的。显示器需要4个引脚驱动,ATtiny85刚好满足应用要求,剩余一个引脚用于1-Wire接口。您不能读取显示内存,因此要做图形,您需要写入RAM中的缓冲区,然后将其复制到显示器上。因为显示器是64x48像素,因此它需要68x48 / 8或384字节的存储器用于图形缓冲区,这也刚好在ATtiny85的能力之内。

现在显示屏变暗的总功耗约为8μA,单个CR2016电池估计超过一年的电池寿命。

电路
以下是Tiny Face手表的电路: