2023年11月20日

u8g2繁中字型

 看了一篇文章,覺得不錯,把它實做了一下。

參考網址:https://www.kidsgo.net/u8g2/index.php

 簡繁中常用字型:https://github.com/kaienfr/Font/blob/master/learnfiles/chinese%E7%AE%80%E7%B9%81%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8.txt

 我轉換好的字型檔:https://drive.google.com/file/d/19Mw1fSSWmxFYSHbvg457jsi362sWJ0L6/view?usp=sharing

 使用方法:

1.把字型檔和ino放在相同目錄

2.在ino中加入語法

#include <U8g2lib.h>

#include "u8g2_font_e58524b32706dda48e7107fc64bfd183.h"

U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
u8g2.setFont(u8g2_font_unifont_myfonts);

 

加入的中文字庫在說明文件中:https://docs.google.com/document/d/125J4c5W3LA7Bf7vy8gK1z82v_ekKfAIktCgZy0Krrls/edit?usp=sharing

 

 


2023年11月1日

google日曆連動line

參考網址 :https://happyplayblogs.blogspot.com/2021/09/line-notify-google.html

 建立一個google script內容如下

申請一個line notify 權杖

const NotifyToken = '';   // Line Notify 權杖
//const calendar = CalendarApp.getDefaultCalendar();
//某一個月曆
const calendar =
const calendar = CalendarApp.getCalendarById('日曆ID');

function Notify() {
  Now = new Date();
  Start = new Date(new Date().setHours(0, 0, 0, 0));
  End =  new Date(new Date().setHours(23, 59, 59, 999));
  calendarData = calendar.getEvents(Now, End);
  if (calendarData.length > 0) {
    var NotifyContents = '今日共' + calendarData.length + "筆待執行活動\n";
    calendarData.forEach(item =>{
      if (Now <= item.getStartTime()) {
        var year = item.getStartTime().getFullYear();
        var month = item.getStartTime().getMonth()+1;
        var day =item.getStartTime().getDate();
        var hour = item.getStartTime().getHours();
        var minute = item.getStartTime().getMinutes();
        startTime = year + "/"+ month + "/" + day + " " + hour + ":" + minute
        NotifyContents += "\n標題:" + ((item.getTitle() != "") ? (item.getTitle()) : ("無標題")) + "\n";
        NotifyContents += "開始時間:" + startTime + "\n";
      }
    })
    Logger.log(NotifyContents)
    UrlFetchApp.fetch("https://notify-api.line.me/api/notify", {
      "method"  : "post",
      "payload" : {"message" : NotifyContents},
      "headers" : {"Authorization" : "Bearer " + NotifyToken}
    });
  }
}
 
執行時要允許授權
google script是可以設定觸發條件

 

2023年9月20日

ubuntu 下arduino ide無法寫入microbit磁碟機

 錯誤訊息:

Open On-Chip Debugger 0.10.0-dev-00254-g696fc0a (2016-04-09-12:07)

 

 解決方法:

cd /etc/udev/rules.d
sudo wget https://raw.githubusercontent.com/arduino/OpenOCD/master/contrib/60-openocd.rules
sudo udevadm control --reload-rules
 

 

2023年8月24日

esp32-cam記錄

參考文章: https://shop.mirotek.com.tw/iot/iot-start-2/

1.接線:燒錄時要準備一個jump把IO0和GND接起來。

 

 怎知道有接好否?把usb接上電腦,開啟arduino ide,打開serial monitor,把鮑率設為115200(通常是這鮑率,若無訊號可以改一下鮑率,如果都無訊號就是接錯),如果有看到...或亂碼大概就對了,按下reset鈕,就會看到類似下圖。

2.讓arduino ide認識esp32:在arduino ide(我用的是1.8.14)偏好設定位置填入網址:https://dl.espressif.com/dl/package_esp32_index.json

 

 

工具/開發板/開發板管理員,輸入esp32,把esp32板子安裝起來。

板子使用ESP32 Wrover Module,使用esp32板子要先安裝esptool,請自行安裝。參數設定如下圖()



燒錄範例檔:開啟範例檔CameraWebServer。

要修改的部分如下:

第17行#define CAMERA_MODEL_ESP_EYE // Has PSRAM,註解掉(加//)。

 //#define CAMERA_MODEL_ESP_EYE // Has PSRAM

第24行//#define CAMERA_MODEL_AI_THINKER // Has PSRAM把註解(//)拿掉

#define CAMERA_MODEL_AI_THINKER // Has PSRAM

第38 39 行,改成你要連線AP的SSID和密碼:

const char* ssid = "AP的SSID";
const char* password = "AP的密碼";

編譯檔案有無問題,無問題後燒錄(燒錄前要把jump插入IO0和GND,很重要、很重要、很重要按下燒錄後,要先按著reset鈕,看到Connecting.........後放開reset鈕。


燒錄完成,移除jump,打開serial monitor,按下reset鈕就會看到板子連上ap後的ip,在瀏覽器中輸入ip就可以看到畫面了。




320x240時可以把臉部辨功能打開。


腳位圖





2023年5月31日

sonarqube原碼檢測安裝記事

 參考文章:https://hackmd.io/@spyua/SkA2AwdBF

linux下環境設置

vm.max_count:流程可以擁有的VMA(虛擬內存區域)的數量
fs.file-max:系統所有程序一共可以開啟的檔案數量
ulinit:設置shell啟動進程所占用的資源

sudo sysctl -w vm.max_map_count=262144
sudo sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 4096 


安裝openjdk-11-jdk

windows download jdk-17(不能用jdk-20)

https://www.oracle.com/tw/java/technologies/downloads/#jdk17-windows

 java -version

安裝和設置資料庫PostgreSQL

sudo apt install postgresql postgresql-contrib
sudo service postgresql start
sudo service postgresql status
sudo passwd postgres

windows install PostgreSQL

https://www.postgresql.org/download/windows/

sudo service postgresql status,用於檢查您資料庫的狀態。
sudo service postgresql start,用來開始執行您的資料庫。
sudo service postgresql stop,用來停止執行您的資料庫。

su - postgres
createuser sonar
psql
ALTER USER sonar WITH ENCRYPTED password 'sonar';
CREATE DATABASE sonarqube OWNER sonar;
grant all privileges on DATABASE sonarqube to sonar;
\q
exit

 下載完解壓縮


config資料夾下
sonar.properties修改處

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube

sonar.sh修改處
RUN_AS_USER=sonar

sudo vim /etc/security/limits.conf
增加 
sonarqube   -   nofile   131072
sonarqube - nproc 8192
啟動
./sonar.sh start


中文化
擴充套件中輸入關鍵字chinese,裝起來
直接下載.jar也可以。

檢測cli文章

修改conf/project.properties
增加入容
#檔案編碼
sonar.sourceEncoding=UTF-8
#專案目錄
sonar.projectBaseDir=/home/teacher/file_dir
#程式碼位置
sonar.sources=.
sonar.cobol.copy.directories=/copy
#登入帳密
sonar.login= admin
sonar.password= password
#專案key
sonar.projectKey=projectkey

執行檢測

./bin/sonar-scanner

2023年4月27日

nano燒錄bootloader

 1準備一塊nano當負責燒錄板子。使用arduino ide燒錄範例檔ArduinoISP

2燒錄的nano和被燒錄的nano,接線方式:GND 、5V、D11、D12、D13根腳位都對接。負責燒錄板子D10腳位接到被燒錄板子的reset腳位

3.連接好後,選擇板子為nano,處理器是ATmega328P,選擇連接port,最後執行燒錄Bootloader。



2023年3月30日

Linkit7697記事

linkit7697規格:

https://www.taiwansensor.com.tw/product/linkit-7697-%E7%89%A9%E8%81%AF%E7%B6%B2%E8%A3%9D%E7%BD%AE%E9%96%8B%E7%99%BC%E6%9D%BF/

 

Linkit 7697 物聯網裝置開發板 開發平臺

  • 含浮點運算功能的 ARM Cortex-M4 MCU,最大運行時脈為 192 MHz
  • 內置 352KB SRAM 和 64KB boot ROM
  • 支援外掛帶有四週邊介面(QPI)模式的串列快閃記憶體
  • 支援在快閃記憶體上直接執行程序(XIP)
  • 在 XIP 模式下的 32KB cache
  • 25 個 DMA channels
  • 支援 32kHz 晶體的低功耗 RTC 模式

藍牙

  • 低功耗藍牙 4.2(Bluetooth LE)
MT7697D 是強化版本,額外提供了 802.11a,以及 5GHz 頻帶的支援。
 

esp32規格

https://zh.wikipedia.org/wiki/ESP32

CPU:160/240 MHz 

記憶體:520 KB SRAM

wifi:802.11 b/g/n 2.4G

藍芽: v4.2 BR/EDR/BLE


 

 arduino ide要認識Linkit7697做法如下:

在偏好設定中加入:https://raw.githubusercontent.com/estea8968/osep_web_serial/master/src/firmware/linkit7697/package_mtk_linkit_7697_index.json

在面板管理員中輸入Linkit,會找到板子,安裝。
安裝好後就會有Linkit7697的板子。


 

2023年3月28日

釋放vhdx占用的無用空間

可能會用到的資訊

 資料來源:https://blog.dino9021.com/2017/12/compact-vhd-vhdx.html

Compact VHD / VHDx

有時候你會發現, Dynamic 的 VHD / VHDx 怎麼 Compact 都還是一樣大
一個 100GB 的 VHD 裡面明明只有 20GB 卻無法縮小
在許多年前我就有發現這個問題並自己摸索找到方法解決
只要進行以下步驟就可以縮小了
  1. 以唯讀模式將 vhd  mount 起來
  2. Compact
  3. unmount
  4. 再 Compact 一次
用 PowerShell Script 比較省事, 請參考以下指令照順序做就可以了

$VHDx = "D:\Hyper-V\Virtual Hard Disks\Disk.vhdx"
mount-vhd -path $VHDx -readonly
optimize-vhd -path $VHDx -mode full
dismount-vhd -path $VHDx
optimize-vhd -path $VHDx -mode full

需要注意的是 OS 必須有 Hyper-V Role 才有能力執行 optimize-vhd
如果只是裝了 Hyper-V Management Feature 是不行執行 Compact 的

後來才發現微軟有這個資訊的參考資料:
https://blogs.technet.microsoft.com/askcore/2012/09/20/compacting-a-dynamically-expanding-virtual-hard-disk-in-windows-server-2012/

2023年2月3日

electron編譯出錯

 error globalThis.....

在hmtl中加入

<script>
        this.globalThis || (this.globalThis = this)
    </script>

避免錯誤訊息

2023年1月24日

osep scratch3 編譯

 1.安裝git 和node js

2.在家目錄下指令

git  clone https://github.com/estea8968/osep_web_serial.git

cd osep_web_serial

npm install

npm run copy

npm start

如果是win系統

 git  clone https://github.com/estea8968/osep_web_serial.git

cd osep_web_serial

npm install

npm run copy:win

npm run start:win

打包npm run build