嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。

1.  开发板 USB  烧录扩展板的镜像  (没有资源  3.35 G 不能传)

1. 首先驱动板子  的模式   调到 USB烧录模式, (我的是 三个拨码 都是 数字的这边)


2.烧录镜像   到外存 emmc  里面  ( 烧录软件资源里面有)

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第1张图片


3. 启动串口连接 驱动板子与电脑    启动内核, 调节模式,关闭模式的显示屏幕

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第2张图片


4.  设置开发版的 地址  (串口调试的工具   自己下一个吧, 版权不能上架)(其他的串口调试也行)

SecureCRT.exe 

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第3张图片

 命令:  ifconfig  eth0  192.168.100.200

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第4张图片


5. 设置网络连接  在windows  系统下  (需要网线连接  电脑  和  驱动板子)

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第5张图片

 嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第6张图片

 嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第7张图片


6. 网络调试工具   连接扩展板子  (网络调节软件  资源有,  文件传输软件  也有)

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第8张图片

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第9张图片


7. 网络传输文件  

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第10张图片

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第11张图片

1. 我们需要传输  自己喜欢的字体   (一般在 )

2. 传输测试的文件 。  (测试扩展板子的功能)

我的测试是 板子的蜂鸣器

指导文件!!

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第12张图片

 网络调试:

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第13张图片


 2. 网络传输在LINUX QT 运行代码传给开发板。 

1. 首先ping 一下

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第14张图片


2.  配置  QT 的环境     (这个我不好写,看  文章 linux QT  运行程序, (之后补) )

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第15张图片

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第16张图片



3.  查看连接,(是否连接)

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第17张图片



4.根据指导文件写代码,  

指导文件,  

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第18张图片

打开LED1     命令: echo  0   >    /sys/class/leds/led1/brightness     

语句解说:  linux  里面   所有的都是文件, 所以我们需要在 QT 里面打开文件 ( /sys/class/leds/led1/brightness)  , 然后向里面写入  0   就可以了。。

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第19张图片

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第20张图片

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第21张图片

 嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第22张图片



 5. 根据指导文件写 QT  代码:  (打开蜂鸣器)

指导文件: 

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第23张图片

 嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第24张图片

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第25张图片

 命令: ./beeper_test   /dev/input/event0

命令解释: 运行可执行文件,(./beeper_test)   文件路径(/dev/input/event0)   

./beeper_test    就是上面个的两张图片 beeper_test.c   gcc  编译出来的!!

根据 命令和 beep 的内核代码我们知道, 怎么写QT 代码了!!!

1. 首先打开  路径: ( /dev/input/event0

2. 创建 结构体:  

struct input_event event;//蜂鸣器的结构体
struct timeval time_beep;//蜂鸣器的时间

3. 向文件里面写入  结构体

4.关于蜂鸣器的开关  配置参数就可以了。

代码:

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第26张图片

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第27张图片



 代码:

widget .h

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
#include 
#include 
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public slots:
    void slot_pushButton_LED1_ON();
    void slot_pushButton_LED1_OFF();

    void slot_pushButton_temp();
    void slot_pushButton_hum();
private slots:
    void on_pushButton_LED1_ON_2_clicked();

    void on_pushButton_LED1_OFF_2_clicked();

    void on_pushButton_LED1_ON_3_clicked();

    void on_pushButton_LED1_OFF_3_clicked();

    void on_pushButton_open_beep_clicked();

    void on_pushButton_close_beep_clicked();

private:
    Ui::Widget *ui;
    QFile *File_led1;//led1
    QFile *File_led2;//led2
    QFile *File_led3;//led3
    QFile *File_beep;//蜂鸣器
    struct input_event event;//蜂鸣器的结构体
    struct timeval time_beep;//蜂鸣器的时间
    QFile *File_punka;//电风扇

};
#endif // WIDGET_H

widget .cpp

#include "widget.h"
#include "ui_widget.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    File_led1 = new QFile("/sys/class/leds/led1/brightness");
    File_led2 = new QFile("/sys/class/leds/led2/brightness");
    File_led3 = new QFile("/sys/class/leds/led3/brightness");
    File_punka= new QFile("/sys/class/hwmon/hwmon1/pwm1");
    File_beep = new QFile("/dev/input/event0");

    //配置蜂鸣器的
    event.type= EV_SND;
    event.code=SND_TONE;
    event.value=1000;
    time_beep.tv_sec=1;
    time_beep.tv_usec=0;
    event.time=time_beep;



    if (!File_led1->open(QIODevice::WriteOnly | QIODevice::Text))
        return;
    if (!File_led2->open(QIODevice::WriteOnly | QIODevice::Text))
        return;
    if (!File_led3->open(QIODevice::WriteOnly | QIODevice::Text))
        return;
    if (!File_beep->open(QIODevice::WriteOnly | QIODevice::Text))
        return;
    if (!File_punka->open(QIODevice::WriteOnly | QIODevice::Text))
        return;




    connect(ui->pushButton_LED1_ON,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_LED1_ON()));
    connect(ui->pushButton_LED1_OFF,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_LED1_OFF()));
    connect(ui->pushButton_temp,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_temp()));
    connect(ui->pushButton_hum,SIGNAL(clicked(bool)),this,SLOT(slot_pushButton_hum()));

}

Widget::~Widget()
{
    delete ui;
}

#include 
void Widget::slot_pushButton_LED1_ON()
{
    //system("echo 1 > /sys/class/leds/led1/brightness");
    File_led1->write("1");
    File_led1->flush();
}

void Widget::slot_pushButton_LED1_OFF()
{
    //system("echo 0 > /sys/class/leds/led1/brightness");
    File_led1->write("0");
    File_led1->flush();
}

void Widget::on_pushButton_LED1_ON_2_clicked()
{
    //system("echo 1 > /sys/class/leds/led2/brightness");
    File_led2->write("1");
    File_led2->flush();
}

void Widget::on_pushButton_LED1_OFF_2_clicked()
{
    //system("echo 0 > /sys/class/leds/led2/brightness");
    File_led2->write("0");
    File_led2->flush();
}

void Widget::on_pushButton_LED1_ON_3_clicked()
{
    //system("echo 1 > /sys/class/leds/led3/brightness");
    File_led3->write("1");
    File_led3->flush();
}

void Widget::on_pushButton_LED1_OFF_3_clicked()
{
    //system("echo 0 > /sys/class/leds/led3/brightness");
    File_led3->write("0");
    File_led3->flush();
}

void Widget::on_pushButton_open_beep_clicked()//电风扇打开
{
    //File_punka->write("200");//电风扇打开 PWM 为 200/255
   // File_punka->flush();
    event.type= EV_SND;
    event.code=SND_TONE;
    event.value=1000;
    time_beep.tv_sec=1;
    time_beep.tv_usec=0;
    event.time=time_beep;
    char *a=(char* )&event;
    File_beep->write(a,sizeof(event));
    File_beep->flush();

}

void Widget::on_pushButton_close_beep_clicked()//电风扇关闭
{
   // File_punka->write("0");//电风扇关闭
    //File_punka->flush();
     event.code = SND_BELL;
     event.value =0;
     char *a=(char* )&event;
     File_beep->write(a,sizeof(event));
     File_beep->flush();
    File_beep->flush();
}




int read_sysfs_float(const char *device, const char *filename, float *val)
{
    int ret = 0;
    FILE *sysfsfp;
    char temp[128];
    memset(temp, '0', 128);
    ret = sprintf(temp, "/sys/bus/iio/devices/%s/%s", device, filename);
    if (ret < 0)
        goto error;
    sysfsfp = fopen(temp, "r");
    if (!sysfsfp) {
        ret = -errno;
        goto error;
    }
    errno = 0;
    if (fscanf(sysfsfp, "%f\n", val) != 1) {
        ret = errno ? -errno : -ENODATA;
        if (fclose(sysfsfp))
            perror("read_sysfs_float(): Failed to close dir");
        goto error;
    }
    if (fclose(sysfsfp))
        ret = -errno;
error:
    return ret;
}

int read_sysfs_int(const char *device, const char *filename, int *val)
{
    int ret = 0;
    FILE *sysfsfp;
    char temp[128];
    memset(temp, '0', 128);
    ret = sprintf(temp, "/sys/bus/iio/devices/%s/%s", device, filename);
    if (ret < 0)
        goto error;
    sysfsfp = fopen(temp, "r");
    if (!sysfsfp) {
        ret = -errno;
        goto error;
    }
    errno = 0;
    if (fscanf(sysfsfp, "%d\n", val) != 1) {
        ret = errno ? -errno : -ENODATA;
        if (fclose(sysfsfp))
            perror("read_sysfs_float(): Failed to close dir");
        goto error;
    }
    if (fclose(sysfsfp))
        ret = -errno;
error:
    return ret;
}


void Widget::slot_pushButton_temp()
{
    int temp_raw = 0;
    int temp_offset = 0;
    float temp_scale = 0;
    read_sysfs_int("iio:device0", "in_temp_raw", &temp_raw);
    read_sysfs_int("iio:device0", "in_temp_offset", &temp_offset);
    read_sysfs_float("iio:device0", "in_temp_scale", &temp_scale);

    //printf("temperature = %.2f\n", (temp_raw + temp_offset) * temp_scale / 1000);
    float temp = (temp_raw + temp_offset) * temp_scale / 1000;
    ui->lineEdit_temp_hum->setText(QString("温度:") + QString::number(temp));
}

void Widget::slot_pushButton_hum()
{
    int hum_raw = 0;
    int hum_offset = 0;
    float hum_scale = 0;

    read_sysfs_int("iio:device0", "in_humidityrelative_raw", &hum_raw);
    read_sysfs_int("iio:device0", "in_humidityrelative_offset", &hum_offset);
    read_sysfs_float("iio:device0", "in_humidityrelative_scale", &hum_scale);
    //printf("humidity = %.2f%%\n", (hum_raw + hum_offset) * hum_scale / 1000);

    float hum = (hum_raw + hum_offset) * hum_scale / 1000;
    ui->lineEdit_temp_hum->setText(QString("湿度:") + QString::number(hum));
}




main.cpp

#include "widget.h"

#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

 ui设计界面



 Widget
 
  
   
    0
    0
    480
    640
   
  
  
   Widget
  
  
   
    
     10
     10
     201
     141
    
   
   
    
     24
    
   
   
    LED1
   
   
    
     
      
       开灯
      
     
    
    
     
      
       关灯
      
     
    
   
  
  
   
    
     10
     320
     381
     151
    
   
   
    
     19
    
   
   
    温度湿度获取
   
   
    
     
    
    
     
      
       
        
         获取温度
        
       
      
      
       
        
         获取湿度
        
       
      
     
    
   
  
  
   
    
     220
     10
     231
     141
    
   
   
    
     24
    
   
   
    LED2
   
   
    
     
      
       开灯
      
     
    
    
     
      
       关灯
      
     
    
   
  
  
   
    
     10
     160
     201
     141
    
   
   
    
     24
    
   
   
    LED3
   
   
    
     
      
       开灯
      
     
    
    
     
      
       关灯
      
     
    
   
  
  
   
    
     10
     490
     111
     51
    
   
   
    打开蜂鸣器
   
  
  
   
    
     150
     490
     111
     51
    
   
   
    关闭蜂鸣器
   
  
 
 
 

效果图:

嵌入式 LINUX 驱动开发 day03 学习USB 烧录扩展盘 的镜像,启动网络传输控制开发板的命令 , 使用网络传输在LINUX QT 运行代码传给开发板。_第28张图片

你可能感兴趣的:(linux,驱动开发,驱动开发,linux,学习)