第八课:树莓派串口控制LED灯(继电器)

目录

一、认知WiringPi库(借鉴:树莓派wiringPi库详解)

①:函数解释

②:串口解除

③:重启sudo reboot

二、树莓派与继电器硬件连接原理图(以GPIO25引脚连接为例)

三、软件代码


一、认知WiringPi库(借鉴:树莓派wiringPi库详解

①:函数解释

 

 ②:串口解除

 /* 修改 cmdline.txt文件 */

cd /boot/
sudo vim cmdline.txt
删除【】之间的部分
dwc_otg.lpm_enable=0 【console=ttyAMA0,115200】 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

③:重启sudo reboot

二、树莓派与继电器硬件连接原理图(以GPIO25引脚连接为例

三、软件代码

/*上位机通过串口控制树莓派引脚状态,从而达到继电器组合控制LED灯的开与关*/

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <wiringSerial.h>

void INIT_GPIO_MODE(void);
void INIT_GPIO_STATUS(void);

void INIT_GPIO_MODE(void)
{
	pinMode(25,OUTPUT);
	pinMode(0,OUTPUT);
	pinMode(2,OUTPUT);
	pinMode(3,OUTPUT);
}
void INIT_GPIO_STATUS(void)
{
	digitalWrite(25,HIGH);
	digitalWrite(0,HIGH);
	digitalWrite(2,HIGH);
	digitalWrite(3,HIGH); 
}
int main()
{
    int data;
    wiringPiSetup();	
    int fd,num;
    fd=serialOpen("/dev/ttyAMA0",9600);
    if(fd==-1)
    {
    	printf("打开串口失败");
    }
    INIT_GPIO_MODE();
    INIT_GPIO_STATUS();
	printf("请输入:1->关闭二楼灯 2->打开二楼灯 3->关闭客厅灯 4->打开客厅灯 5->关闭泳池灯 6->打开泳池灯 7->关锁  8->开锁\n ");
	while(1)
	{
		while(serialDataAvail(fd)!=-1)
		{
			data=serialGetchar(fd);
			printf("data=%02X\r\n",data);
			switch(data)
			{
				case 0x02:
					digitalWrite(25,HIGH);
				break;
				case 0x01:
					digitalWrite(25,LOW);
				break;
				case 0x11:
					digitalWrite(3,HIGH);
				break;
				case 0x10:
					digitalWrite(3,LOW);
				break;
				case 0x06:
					digitalWrite(2,HIGH);
				break;
				case 0x05:
					digitalWrite(2,LOW);
				break;
				case 0x08:
					digitalWrite(0,HIGH);
				break;
				case 0x07:
					digitalWrite(0,LOW);
				break;
				case 0x09:
					INIT_GPIO_STATUS();
				default:
				break;
			}
		}
	}
	return 0;
}
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的代码示例,它可以使用RFID和蓝牙模块来控制LED继电器。 首先,你需要准备以下材料: - Arduino UNO板 - RFID模块 - 蓝牙串口模块 - LED继电器模块 - 杜邦线若干 接下来,你需要将RFID模块连接到Arduino板上,并下载RFID库。然后将蓝牙模块连接到Arduino板上,并下载蓝牙库。 将LED继电器模块连接到Arduino板上。根据你的模块类型,接线方式会有所不同。一般来说,LED的正极连接到Arduino板的数字引脚,负极连接到GND。继电器模块需要连接到Arduino板的数字引脚,并连接电源和负载。 接下来,你可以使用下面的代码作为参考,进行修改和优化: ```C++ #include <SoftwareSerial.h> #include <RFID.h> SoftwareSerial BTserial(10, 11); // RX | TX RFID rfid(2, 3); // SDA | SCK int ledPin = 7; // LED的数字引脚 int relayPin = 8; // 继电器模块的数字引脚 bool ledState = false; // LED的状态 bool relayState = false; // 继电器的状态 void setup(){ pinMode(ledPin, OUTPUT); // 设置LED的数字引脚为输出模式 pinMode(relayPin, OUTPUT); // 设置继电器的数字引脚为输出模式 BTserial.begin(9600); // 初始化蓝牙串口 Serial.begin(9600); // 初始化调试串口 rfid.init(); // 初始化RFID模块 } void loop(){ if (rfid.isCard()) { // 如果检测到RFID卡 rfid.readCardSerial(); // 读取卡片序列号 Serial.println(rfid.serNum[0], DEC); // 输出RFID卡片序列号 if (rfid.serNum[0] == 0x01) { // 如果是卡片1 ledState = !ledState; // 取反LED的状态 digitalWrite(ledPin, ledState); // 设置LED的状态 relayState = !relayState; // 取反继电器的状态 digitalWrite(relayPin, relayState); // 设置继电器的状态 BTserial.print("OK\r\n"); // 发送指令响应 } } if (BTserial.available()) { // 如果蓝牙串口有数据 char command = BTserial.read(); // 读取数据 Serial.println(command); // 输出数据 if (command == '0') { // 如果收到数字0 ledState = false; // 关闭LED digitalWrite(ledPin, ledState); // 设置LED的状态 relayState = false; // 关闭继电器 digitalWrite(relayPin, relayState); // 设置继电器的状态 BTserial.print("OK\r\n"); // 发送指令响应 } else if (command == '1') { // 如果收到数字1 ledState = true; // 打开LED digitalWrite(ledPin, ledState); // 设置LED的状态 relayState = true; // 打开继电器 digitalWrite(relayPin, relayState); // 设置继电器的状态 BTserial.print("OK\r\n"); // 发送指令响应 } } } ``` 上述代码会读取RFID卡的序列号,并根据不同的卡片状态来控制LED继电器的开关。同时,它还可以通过蓝牙串口接收数字指令,来控制LED继电器的开关。你可以根据自己的实际需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值