2023年4月20日 星期四

PICO W Drive Lib by MicroPython note1

 

===============
##MCU Frequency check and Switch speed 
import machine

machine.freq()          # get the current frequency of the CPU
machine.freq(240000000) # set the CPU frequency to 240 MHz

The rp2 module:
import rp2
===============
##Delay and timing Use the time module:
import time

time.sleep(1)           # sleep for 1 second
time.sleep_ms(500)      # sleep for 500 milliseconds
time.sleep_us(10)       # sleep for 10 microseconds
start = time.ticks_ms() # get millisecond counter
delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference

===============
##Pins and GPIO Use the machine.Pin class:

from machine import Pin

p0 = Pin(0, Pin.OUT)    # create output pin on GPIO0
p0.on()                 # set pin to "on" (high) level
p0.off()                # set pin to "off" (low) level
p0.value(1)             # set pin to on/high

p2 = Pin(2, Pin.IN)     # create input pin on GPIO2
print(p2.value())       # get value, 0 or 1

p4 = Pin(4, Pin.IN, Pin.PULL_UP) # enable internal pull-up resistor
p5 = Pin(5, Pin.OUT, value=1) # set pin high on creation

===============
##UART (serial bus) See machine.UART.

from machine import UART

uart1 = UART(1, baudrate=9600, tx=33, rx=32)
uart1.write('hello')  # write 5 bytes
uart1.read(5)         # read up to 5 bytes



===============
##PWM (pulse width modulation) How does PWM work on the RPi RP2xxx?
##Use the machine.PWM class:

from machine import Pin, PWM

pwm0 = PWM(Pin(0))      # create PWM object from a pin
pwm0.freq()             # get current frequency
pwm0.freq(1000)         # set frequency
pwm0.duty_u16()         # get current duty cycle, range 0-65535
pwm0.duty_u16(200)      # set duty cycle, range 0-65535
pwm0.deinit()           # turn off PWM on the pin

===============
##ADC (analog to digital conversion)
##How does the ADC module work? Use the machine.ADC class:

from machine import ADC

adc = ADC(Pin(32))          # create ADC object on ADC pin
adc.read_u16()              # read value, 0-65535 across voltage range 0.0v - 3.3v


===============
##Software SPI bus
##Software SPI (using bit-banging) works on all pins, and is accessed via ##the machine.SoftSPI class:

from machine import Pin, SoftSPI

# construct a SoftSPI bus on the given pins
# polarity is the idle state of SCK
# phase=0 means sample on the first edge of SCK, phase=1 means the second
spi = SoftSPI(baudrate=100000, polarity=1, phase=0, sck=Pin(0), mosi=Pin(2), miso=Pin(4))

spi.init(baudrate=200000) # set the baudrate

spi.read(10)            # read 10 bytes on MISO
spi.read(10, 0xff)      # read 10 bytes while outputting 0xff on MOSI

buf = bytearray(50)     # create a buffer
spi.readinto(buf)       # read into the given buffer (reads 50 bytes in this case)
spi.readinto(buf, 0xff) # read into the given buffer and output 0xff on MOSI

spi.write(b'12345')     # write 5 bytes on MOSI

buf = bytearray(4)      # create a buffer
spi.write_readinto(b'1234', buf) # write to MOSI and read from MISO into the buffer
spi.write_readinto(buf, buf) # write buf to MOSI and read MISO back into buf

===============
##Hardware SPI bus
##Hardware SPI is accessed via the machine.SPI class and has the same methods as ##software SPI above:

from machine import Pin, SPI

spi = SPI(1, 10000000)
spi = SPI(1, 10000000, sck=Pin(14), mosi=Pin(13), miso=Pin(12))
spi = SPI(2, baudrate=80000000, polarity=0, phase=0, bits=8, firstbit=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))

===============
##Software I2C bus

from machine import Pin, SoftI2C

i2c = SoftI2C(scl=Pin(5), sda=Pin(4), freq=100000)

i2c.scan()              # scan for devices

i2c.readfrom(0x3a, 4)   # read 4 bytes from device with address 0x3a
i2c.writeto(0x3a, '12') # write '12' to device with address 0x3a

buf = bytearray(10)     # create a buffer with 10 bytes
i2c.writeto(0x3a, buf)  # write the given buffer to the slave

===============
##Hardware I2C bus

from machine import Pin, I2C

i2c = I2C(0)
i2c = I2C(1, scl=Pin(5), sda=Pin(4), freq=400000)

===============
##Real time clock (RTC)
##See machine.RTC

from machine import RTC

rtc = RTC()
rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # set a specific date and time
rtc.datetime() # get date and time


===============
##WDT (Watchdog timer)
##Is there a watchdog timer?
##See machine.WDT.

from machine import WDT

# enable the WDT with a timeout of 5s (1s is the minimum)
wdt = WDT(timeout=5000)
wdt.feed()


===============
##Deep-sleep mode

import machine

# check if the device woke from a deep sleep
if machine.reset_cause() == machine.DEEPSLEEP_RESET:
    print('woke from a deep sleep')

# put the device to sleep for 10 seconds
machine.deepsleep(10000)

===============
##OneWire driver
##The OneWire driver is implemented in software and works on all pins:

from machine import Pin
import onewire

ow = onewire.OneWire(Pin(12)) # create a OneWire bus on GPIO12
ow.scan()               # return a list of devices on the bus
ow.reset()              # reset the bus
ow.readbyte()           # read a byte
ow.writebyte(0x12)      # write a byte on the bus
ow.write('123')         # write bytes on the bus
ow.select_rom(b'12345678') # select a specific device by its ROM code

There is a specific driver for DS18S20 and DS18B20 devices:
import time, ds18x20
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
    print(ds.read_temp(rom))


===============
## NeoPixel and APA106 driver
##Use the neopixel and apa106 modules:

from machine import Pin
from neopixel import NeoPixel

pin = Pin(0, Pin.OUT)   # set GPIO0 to output to drive NeoPixels
np = NeoPixel(pin, 8)   # create NeoPixel driver on GPIO0 for 8 pixels
np[0] = (255, 255, 255) # set the first pixel to white
np.write()              # write data to all pixels
r, g, b = np[0]         # get first pixel colour

##The APA106 driver extends NeoPixel, but internally uses a different colour order:

from apa106 import APA106
ap = APA106(pin, 8)
r, g, b = ap[0]

##APA102 (DotStar) uses a different driver as it has an additional clock pin.



2023年3月21日 星期二

Microsoft 365 Copilot 20230322

   

#Microsoft 365 Copilot 完整發表會




# Microsoft 365 Copilot in Excel Demo

#Microsoft 365 Copilot in Word


#Microsoft 365 Copilot in PowerPoint




AI for express module https CRT

Login_id = req.connection.getPeerCertificate(); 用途


req.connection.getPeerCertificate() 是 Node.js 中一个方法,可以用来获取发起当前 HTTP(s) 请求的客户端的 SSL 证书信息。它返回一个对象,包含客户端 SSL 证书的详细信息,例如证书的颁发机构、有效期、公钥等。

这个方法通常用于验证客户端的身份,以确保客户端是一个合法的用户,而不是一个恶意的攻击者。在一些需要安全性的应用场景中,例如电子商务网站、在线支付系统等,服务端通常会使用 SSL/TLS 协议对通信进行加密,客户端会使用自己的 SSL 证书来验证身份。

使用 req.connection.getPeerCertificate() 方法,可以方便地获取客户端的 SSL 证书信息,进而进行验证。例如,可以检查证书是否过期、是否被吊销、是否被篡改等,以确保通信的安全性。



以下是使用 Node.js Express 模块来获取客户端 SSL 证书信息的示例代码:

const express = require('express');

const app = express();


app.get('/', (req, res) => {

  // 获取客户端 SSL 证书信息

  const peerCertificate = req.connection.getPeerCertificate();

  

  // 如果证书存在,输出证书信息

  if (peerCertificate) {

    console.log('客户端证书信息:', peerCertificate);

    res.send('Hello, secure world!');

  } else {

    console.log('无法获取客户端证书信息。');

    res.status(401).send('Unauthorized');

  }

});

app.listen(3000, () => {

  console.log('应用已启动,监听 3000 端口。');

});


以上內容來自 <https://chat.openai.com/chat> 

在这个示例中,我们创建了一个 Express 应用,并定义了一个路由处理函数。在路由处理函数中,

我们调用 req.connection.getPeerCertificate() 方法来获取客户端的 SSL 证书信息,并进行了简单的处理:


如果证书存在,将证书信息输出到控制台,并返回一个成功的 HTTP 响应。

如果证书不存在,返回一个 401 未授权的 HTTP 响应。

需要注意的是,如果客户端没有使用 SSL/TLS 协议与服务端建立连接,

或者使用的是自签名证书,req.connection.getPeerCertificate() 方法将返回 null。在

这种情况下,我们可以根据具体情况进行处理。


2023年3月17日 星期五

[雙鐵行] >>南迴規劃 (台北出發來回)

 
[去]

"自強103  (05:56 七堵 到 12:15 潮州)台北06:23  板橋06:35   

區間快 3061 ( 新左營 → 枋寮 )潮州12:31 枋寮13:03

枋寮-車城-四重溪 單車 42.6KM "


[回]

"四重溪- 牡丹鄉旭海路口- 壽卡鐵馬驛站-大武站 50Km

莒光707 (大武16:05 臺東17:19)

區間快4041 (臺東18:05 花蓮21:22)

區間快 4039 ( 花蓮20:55>>臺北23:58>>樹林:00:19 ) "

2023年3月15日 星期三

GitHub Copilot Labs Note

 

GitHub Copilot Labs 安裝 於VS code IDE Tool 工具攔出現 Copilot 图标示例 Copilot 图标

點擊後 出現四大功能



>EXPLAN 
分析你提供的code 提出說明解釋


>LANGUAGE TRANSLATION
將選定的 code 轉換成 其他指定的語言


>BRUSHES
Code 掃描分析 sub Function
# Readable 
#Add Type
#Fix Bug
#Debug 
       於code 中加入 有助debug 的顯示相關參數的修正 
#Clean
#List Strps
        產生單行的註解說明
#make Robust  
        強化 code 的可靠度 加入錯誤處理及數據型態檢查等 防止錯誤使程式更加可靠 
#chunk 
#Document 
       產生標註區塊內code  的註解
#Custom
      要求AI 將指定的code 依使用者要求方式重寫 




>TEST GENERATION
  對指定的 Function 產生 測試程式

\

VS code 設定為中文介面

 若您使用的是 Visual Studio Code(VS Code),您可以按照以下步驟將其設定為中文介面:

  1. 開啟 VS Code。
  2. 點擊左側的「擴充功能」圖示,或是使用快捷鍵 Ctrl + Shift + X。
  3. 在搜尋欄位中輸入「Chinese (Traditional) Language Pack for Visual Studio Code」(繁體中文語言包)或「Chinese (Simplified) Language Pack for Visual Studio Code」(簡體中文語言包)。
  4. 找到相對應的擴充功能,並點擊「安裝」按鈕。
  5. 安裝完成後,重新啟動 VS Code。
  6. 點擊左下角的「齒輪」圖示,進入設定界面。
  7. 在搜索框中輸入「locale」。
  8. 找到「Locale」設置欄位,將其更改為「zh-tw」(繁體中文)或「zh-cn」(簡體中

crontab 開機時自動執行

 要让 crontab 在系统启动时自动执行,可以按照以下步骤:

  1. 打开终端并输入以下命令来编辑当前用户的 crontab 文件:
    crontab -e
    如果要编辑系统范围内的 crontab 文件,则需要使用 sudo 或 root 权限:
    sudo crontab -e
  2. 在编辑器中添加以下行:
    python
    @reboot command-to-be-executed
    这里,“@reboot”指定了在系统启动时运行该命令。command-to-be-executed 是要在启动时运行的命令或脚本的完整路径。
  3. 保存并关闭文件。
  4. 如果你编辑的是当前用户的 crontab 文件,则你不需要重新启动 cron 服务。如果你编辑的是系统范围内的 crontab 文件,则可以使用以下命令重新启动 cron 服务以使更改生效:
    sudo systemctl restart cron

现在,每次系统启动时,cron 将自动运行指定的命令或脚本。

编辑 crontab 文件步骤

 要编辑 crontab 文件,可以按照以下步骤:

  1. 打开终端。

  2. 输入以下命令来编辑当前用户的 crontab 文件:

    crontab -e

    如果你想编辑系统范围内的 crontab 文件,可以使用以下命令,但需要使用 sudo 或 root 权限:

    sudo crontab -e
  3. 在编辑器中,按照以下格式添加 cron job 条目:

    css
    * * * * * command-to-be-executed

    这里,星号表示每个字段的所有可能值,分别表示分钟、小时、日、月、周几。可以用数字来指定这些字段中的特定值。例如,要每天早上6点运行命令,可以使用以下格式:

    css
    0 6 * * * command-to-be-executed

    注意:每个字段中可以指定的值的范围是有限的。例如,月份只能在1到12之间的整数值中指定。

  4. 保存并关闭文件。

  5. 如果你编辑的是当前用户的 crontab 文件,则你不需要重新启动 cron 服务。如果你编辑的是系统范围内的 crontab 文件,则可以使用以下命令重新启动 cron 服务以使更改生效:

    sudo systemctl restart cron

现在,你的 cron job 将按照指定的时间表运行。你可以使用以下命令来查看当前用户的所有 cron job:

crontab -l

如果你想查看系统范围内的所有 cron job,则可以使用以下命令,但需要使用 sudo 或 root 权限:

sudo crontab -l

dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt Docker 映像介紹

 dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt Docker 映像介紹 1. 基本概述 名稱: dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt 維護者: Dorowu 用途: 提供基於 Ub...