2022年5月18日水曜日

raspberry pi 初期設定 2022

 焼きたてのSDカードから

先ずはSSHが使えるようにする。

Wifiの設定はモニターを繋いでから初期設定で実施。

続いて、エディター vim と パーテーション情報を見たかったので Gparted をインストール

さて、では順を追って設定

① dhcpd.configで固定IPに変更 sudo vi /etc/dhcpcd.conf

ファイルの最後に下記文言を張り付け

私の環境では、Windows マシンで環境を確認。

interface wlan0

static ip_address=192.168.1.71/24

static routers=192.168.1.1

static domain_name_servers=192.168.1.1

② /の直下にsshという空ファイルを置く。

そうすると SSHで入れるようになった。

③ 日本語化

sudo apt-get install ibus-mozc

④ リモートデスクトップ

sudo apt-get install xrdp

sudo systemctl enable xrdp   # 自動起動が不要な場合は実行しない

ラズパイコンフィグでもおまじない。

sudo raspi-config

2 Display Option > D4 Screen Blankingと選択していきます。

Would you like to enable screen blanking?

と聞かれますのでYesを選択してエンターキーを押します。設定が完了すると再起動を求められますので再起動します。

これで、一通り困らなくなるので、あとは入れたいソフトを入れ行くだけ。

2022年5月8日日曜日

raspberry pi のwifiを無効化する方法

 忘れないように。。。


良く忘れる。

Wifi無効化


sudo iwconfig wlan0 txpower off


Wifi有効化


sudo iwconfig wlan0 txpower auto

2022年5月7日土曜日

Raspberry Pi Pico プログラミング事始め。I2Cを使うぞの巻

 結構前日までは、スムーズに進んだのですがI2Cでは色々とハマりました。

AQM1602のLCDを動かそうと思って作業をしましたが、いろいろとハマりようやく表示できました。

動かしたのは秋月のこんなやつ、一番安いやつですね。

はまったポイントはいっぱい。

今日の段階では何とか動いた感じである。

波形が出ているかもわからず。。。

やっぱりオシロ欲しいな。。。

i2c_write_blocking( , , , ,true) だと動かない。。。

i2c_write_blocking(I2C_PORT, addr, buf, 2, false);


#include "pico/stdlib.h"
#include "hardware/i2c.h"

#include <stdio.h>

#define addr 0x3e
#define command 0x00
#define data1 0x40
#define clear 0x01
#define home 0x02
#define display_On 0x0f
#define LCD_2ndline 0x40+0x80
#define READ_BIT 0x80

#define I2C_PORT  i2c1

void init(void) {
   i2c_init(I2C_PORT, 100 * 1000);
    gpio_set_function(26, GPIO_FUNC_I2C);
    gpio_set_function(27, GPIO_FUNC_I2C);
    gpio_pull_up(26);
    gpio_pull_up(27);

}

static void I2C_read_registers(uint8_t reg, uint8_t *buf, uint16_t len) {
    // For this particular device, we send the device the register we want to read
    // first, then subsequently read from the device. The register is auto incrementing
    // so we don't need to keep sending the register we want, just the first.
    reg = reg | READ_BIT;
    i2c_write_blocking(I2C_PORT, addr, &reg, 1, true);
    i2c_read_blocking(I2C_PORT, addr, buf, len, true);
}

static void I2C_write_register(uint8_t reg, uint8_t data) {
    uint8_t buf[2];
    //buf[0] = reg & 0x7f;  // remove read bit as this is a write
    buf[0] = reg;
    buf[1] = data;
    i2c_write_blocking(I2C_PORT, addr, buf, 2, false);
}

int main() {
    stdio_init_all();

    init();

    const uint LED_PIN = 22;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    char *b = "apple pen" ;
    int cnt;

   while(true){
   I2C_write_register(command,0x38);
   sleep_ms(1);
   I2C_write_register(command,0x39);
   sleep_ms(1);
   I2C_write_register(command,0x14);
   sleep_ms(1);
   I2C_write_register(command,0x73);
   sleep_ms(1);
   I2C_write_register(command,0x56);
   sleep_ms(1);
   I2C_write_register(command,0x6c);
   sleep_ms(1);
   sleep_ms(1);
   I2C_write_register(command,home);
   sleep_ms(1);
   I2C_write_register(command,clear);
   sleep_ms(1);
   I2C_write_register(command,display_On);
   sleep_ms(1);
   
   for (cnt = 0; *(b + cnt) != '\0'; cnt++) {
       I2C_write_register(data1, *( b + cnt));
       }
   sleep_ms(1000);
   }

}









2022年5月5日木曜日

Raspberry Pi Pico プログラミング事始め。SWでのHW割り込み

 続いてSWでのHW割り込みをかけてみた。

特にハマるところはなし。

callback関数が呼び出されたら、割り込みを一度OFFして関数を抜けるときに再度割り込みをONにする。


#include "pico/stdlib.h"
#include <stdio.h>

const uint input_PIN = 20;

void callback_keyirq() {
    gpio_set_irq_enabled(input_PIN, 0x4u, false);
    printf("push_sw\n");
    gpio_set_irq_enabled(input_PIN, 0x4u, true);

}

int main() {
    stdio_init_all();

 
    gpio_init(input_PIN);
    gpio_set_dir(input_PIN, GPIO_IN);
    const uint LED_PIN = 22;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
   
    gpio_set_irq_enabled_with_callback(input_PIN, 0x4u, false, callback_keyirq);
    gpio_set_irq_enabled(input_PIN, 0x4u, true);

    while (true) {
        gpio_put(LED_PIN, 1);
        sleep_ms(200);
        gpio_put(LED_PIN, 0);
        sleep_ms(200);
     }
   
}


Raspberry Pi Pico プログラミング事始め。GPIO 入力。

キー入力の割り込みを身に着けようと思ったら、まだ通常の割り込み入力も行っていなかった。

慌てて、下記プログラムを記載。

はまった点

・Serial標準出力を使うときには、stdio_init_all();を入れないとダメだった。

 全然GPIO入力と関係ない所ではまりました。

 その他はすなおに作れました。。。

ボタンを押した回数のカウントです。


#include "pico/stdlib.h"
#include <stdio.h>

int main() {
    stdio_init_all();
    int i=0;
    const uint input_PIN = 20;
    gpio_init(input_PIN);
    gpio_set_dir(input_PIN, GPIO_IN);
    while (true) {
     if(gpio_get(input_PIN) == 0)
     {
         i++;
         sleep_ms(500);
         printf("%d",i);
         printf("kaime\n");
     }
     else ;
    }
}


Raspberry Pi Pico プログラミング事始め。タイマー割り込み

今日はタイマー割り込みをしてみた。

結構APIがしっかりしていて、下記のようにPWMのプログラムをタイマー割り込みVerに変更してみた。

参考は下記サイト

https://qiita.com/keyyum/items/3ce448c098c546dced20

#include "pico/stdlib.h"
#include "hardware/pwm.h"

const uint LED_PIN = 22;  
uint slice_num;
int i=0;
int flag=0;

bool timer_callback( repeating_timer_t *rt )
{

    pwm_set_enabled(slice_num, false);

    if(flag==0){
        i=i+1;
        if(i==256) flag=1;
        else ;    
    }    
    else {
        i=i-1;
        if(i==0) flag=0;
        else ;
    }
    pwm_set_chan_level(slice_num, 0, i);
    pwm_set_enabled(slice_num, true);
    return ( true );

}

void init(void)
{
 
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    gpio_set_function(LED_PIN, GPIO_FUNC_PWM);
    slice_num = pwm_gpio_to_slice_num(22); //pin 22 slice No = 22
    /*例えばPWM周波数を1KHzに、PWMの分解能を8ビット(0~255)に設定したい場合、
    sysclock = 125,000,000Hz、wrap = 255、f=1000Hz より
    clkdiv = sysclock / ((wrap+1) ⋅ f )
    分周比 clkdiv = 488.2812 となる。*/
    pwm_set_clkdiv(slice_num, 488.2812);
    pwm_set_wrap(slice_num, 255);

    // チャンネルPWMのHigh期間を設定
    pwm_set_chan_level(slice_num, 0, 0);
    pwm_set_enabled(slice_num, true);

}


int main() {

    init();
   static repeating_timer_t timer;
   
    add_repeating_timer_ms( -10, &timer_callback, NULL, &timer );


    while (true) {
       
    }

    }

2022年5月4日水曜日

Raspberry Pi Pico プログラミング事始め。PWM編

 続いてPWMを動かしてみます。

LEDをGPIO 22に付けました。

ので 22ピンのPWMを動かしてみます。

ソースコードは下記のように周期的にPWM周期を変えてみました。

ハマった点は3か所

1)#include "hardware/pwm.h" をインクルードする。。。

2)uint slice_num = pwm_gpio_to_slice_num(22);  ここはGPIO番号を入れれば良いらしい。

3)一番最初にBuildできなかったのが、CMakeLists.txtに記載が必要だった。

  # Pull in our pico_stdlib which pulls in commonly used features        

   target_link_libraries(pwm pico_stdlib hardware_pwm)

  これだから人気でないんだよな~


#include "pico/stdlib.h"
#include "hardware/pwm.h"

int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning blink example requires a board with a regular LED
#else
    const uint LED_PIN = 22;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    gpio_set_function(LED_PIN, GPIO_FUNC_PWM);
    uint slice_num = pwm_gpio_to_slice_num(22); //pin 22 slice No = 22
    /*例えばPWM周波数を1KHzに、PWMの分解能を8ビット(0~255)に設定したい場合、
    sysclock = 125,000,000Hz、wrap = 255、f=1000Hz より
    clkdiv = sysclock / ((wrap+1) ⋅ f )
    分周比 clkdiv = 488.2812 となる。*/
    pwm_set_clkdiv(slice_num, 488.2812);
    pwm_set_wrap(slice_num, 255);

    // チャンネルPWMのHigh期間を設定
    pwm_set_chan_level(slice_num, 0, 5);
    pwm_set_enabled(slice_num, true);

    int i=0;
    int flag=0;

    while (true) {

    if(flag==0){
        i=i+1;
        if(i==256) flag=1;
        else ;    
    }    
    else {
        i=i-1;
        if(i==0) flag=0;
        else ;
    }
    pwm_set_chan_level(slice_num, 0, i);
    pwm_set_enabled(slice_num, true);
        sleep_ms(10);
        pwm_set_enabled(slice_num, false);

       
    }
#endif
}



2022年5月3日火曜日

Raspberry Pi Pico プログラミング事始め。UART編 出力PINを変える。

 UART0は色々なPINから出力できるようだ。

今回は16,17ピンからFT232Cに出力させたい。

こんな感じでできました。

GPIOの番号で出力ピンを設定するのね。。。


/**
 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <stdio.h>
#include "pico/stdlib.h"

int main() {
    stdio_init_all();
    int i;
    i=0;

    const uint LED_PIN = PICO_DEFAULT_LED_PIN;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    uart_init(uart0, 115200);
    gpio_set_function(12, GPIO_FUNC_UART);
    gpio_set_function(13, GPIO_FUNC_UART);
    uart_set_translate_crlf(uart0, true);

    while (true) {
        //printf("%d",i);
       
        sleep_ms(1000);
        if(i==0) {
            uart_puts(uart0, "Hello world!\n");
            gpio_put(LED_PIN, 1);
            i=i+1;
        }
        else {
            i=0;
            uart_puts(uart0, "GPIO Change!\n");
            gpio_put(LED_PIN, 0);
        }
       
    }
    return 0;
}