Anaconda 是非常好用的虛擬環境管理工具,但是GUI圖形界面Navigator無法在ubuntu開啟,只能用命令來控制虛擬環境,對於熟習視窗作業系統的使用者界面來說有點不方便

不過後來查到其實是可以開啟的,這樣在教學上就方便多了。

image

開啟其實很簡單,利用命令

source ~/anaconda3/bin/activate root
anaconda-navigator

也可以寫成.sh以後直接執行即可

1. 開啟文字編譯器,輸入以下內容


#!/bin/bash
source ~/anaconda3/bin/activate root
anaconda-navigator
chmod +x runme.sh


2. 存檔成anaconda.sh

3. 後續只要執行
bash anaconda.sh


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

當我們使用ESP32時,可以像傳統Arduino UNO使用中斷語法

中斷(Interrupt)這個功能,類似我們以前寫C#時的Callback,也就是物件導向裡面的事件(Event)驅動,當特定事件發生時,我們再去處理這件事所對應的功能Function。

舉個例子來說,在還沒學習到中斷以前,我們的來客報知機(人體感測器+錄放音機)是利用Loop內的不斷偵測,delay時間還不能太長,避免沒偵測到,而沒有觸發歡迎詞,但是如果來客報知機還有其他用途時,例如偵測光敏,就必須也寫在loop內,這樣兩個功能就可能互相干擾,delay時間可能不同之類。

中斷的功能則是把「偵測」、「觸發」的部份合併在一起,並且可以拉出去Loop外,讓系統來幫我們做,不過偵測只能數位偵測(HIGH或LOW),另外中斷內不放置Delay,越簡單越好。

以下範例程式,可以讓ESP32依據腳位14發生變化時,改變腳位2的燈號,例如當人體感測器發生變化時,會點亮LED燈。能偵測的變化有四種類型

LOW:狀態成為LOW就觸發
HIGH:狀態成為HIGH就觸發
CHANGE:狀態改變就觸發,例如LOW->HIGH,或HIGH->LOW都算
RISING:狀態由LOW->HIGH就觸發,反之無效
FALLING:狀態由HIGH->LOW就觸發,反之無效

最後當要取消中斷時,可以用detachInterrupt(GPIOPin);來取消即可


int interruptPin = 14;  //中斷腳位
int ledPin=2; //LED腳位
int state = 0;   //預設LED狀態LOW
void setup() {
  pinMode(ledPin, OUTPUT);  
  pinMode(interruptPin, INPUT); //人體感測輸入
  attachInterrupt(digitalPinToInterrupt(interruptPin), isr_Callback, CHANGE);  
  //CHANGE:狀態改變就觸發
}

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

最近在開發一些文字辨識的Python程式,用了EasyOCR或是Tesseract,效果說真的都很爛,無意間看到一個套件Paddle,測試一下發現效果非常好。

但是移植到其他電腦卻發現執行錯誤:

ModuleNotFoundError: No module named 'paddle.fluid.core_noavx'

稍微搜尋一下發現是CPU規格的問題,似乎是有些低階的CPU不包含AVX核心,所以一模一樣的安裝方法有些電腦可以,有些卻會出現問題,最好的方式是直接安裝不含AVX的2.0.1核心,安裝順序及步驟如下


pip3 install paddlepaddle==2.0.1 -f https://paddlepaddle.org.cn/whl/stable/noavx.html 
pip3 install common dual tight data prox
pip3 install paddle
pip3 install paddleocr

 


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

安裝好Ubuntu之後,習慣會安裝Chrome瀏覽器,目前在Ubuntu的Chrome是藍色的Chromium版本,可以直接用安裝方法apt方式安裝

sudo apt install chromium-browser

不過安裝好後,-發現中文變成框框的亂碼:□ ,類似下圖

HnhAc.png

查了下網路,解決方式也很簡單,以超級使用者開啟編譯器

sudo gedit

然後開啟這個字形檔案

etc/fonts/conf.d/49-sansserif.conf

然後修改最後一個設定為<string>monospace</string>

然後重開Chromium即可~

image

 


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

在幾千萬年前,非洲的東岸有一群猴子,當時的非洲有著茂密的森林,因此猴子們愉快的生活在樹上,肚子餓就抓森林的昆蟲及果子來吃,而面對的掠食者也非常少,因此就這樣一直相安無事幾千萬年。

不過有一天發生大地震,地上裂開了一個大峽谷(東非大裂谷),硬生生的把東非切成兩半,由於地形發生變化,也嚴重影響當地的氣候,裂谷西半部的仍然中非大森林區,在此處居住的猴子們生活條件沒有發生變化,因此的生活方式依然跟千萬年一樣。

不過倒霉的是當時位在東邊的猴子了,森林逐漸消失,形成的是廣大無比的草原,猴子能棲身的樹木越來越少,食物也越來越匱乏,逼得這些猴子必須到地面尋找食物,而到了地面就必須面對獅子這種頂級掠食者,也讓這些猴子直立身體以觀察四周更早發現危險,而猴子間為了互相通知獅子靠近,發展出更多的群體溝通方式,逐漸形成早期的群體生活。

這些在東岸直立行走的猴子在當時可能會被全世界的猴子排擠吧。
西邊的鍵盤猴:「你看東邊那群猴子,用怪異的方式走路耶,笑死我了,上帝給我們四隻就是用來走路的,他們只用了兩隻,剩下兩隻不用是不尊重上帝賜予,會下地獄的」。

此時東岸猴子不僅要隨時面對獅子猛獸,還要到處遷徙尋找食物,相對於西邊的猴子食物充足每天悠閒著生活,真是充滿了苦難,不過呢,幾百萬年後,情勢逆轉了,由於東岸的猴子們必須每天跟自然對抗才能生存,因此更能適應環境,而解放的雙手也製造出更多的捕獵工具,成為比獅子更恐怖的頂級掠食者。

最後,他們踏出東岸,走向全世界,成為意義上的第一代人類。
而處在西岸的猴子們呢?經過了千萬年,他們依舊是猴子,生活在樹上。

 


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

最近有一個案子使用到RPI,程式用Python寫的,不過如果RPI意外被關機,或者停電,那麼就要重新啟動我寫的程式,如果希望系統啟動時,能順便把Python程式執行就更好了,在Windows時代,我們可以找到一個「C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp」,把程式放到裡面就可以隨著Windows開機自動執行,那麼RPI有沒有呢?

一個朋友剛好也問我這個問題,我說我研究看看,但是過幾天他說他找到資料,並且傳網址給我,感謝您

網址:https://forums.raspberrypi.com/viewtopic.php?t=294014

上面網址有列出四個方法,我用的是「System Method」,也就是說,任何使用者登入,都會啟動。

步驟:

1. 開啟自動程式程式:
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
image
內容是:
@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash

2.將要執行的程式加到最後,例如我要執行的是Python程式,那麼加上完整路徑的Python
  2.1有Terminal視窗
    @lxterminal -e python3  /home/pi/Python/hello.py 
  2.2 如果不希望有視窗的話就
    @python3  /home/pi/Python/hello.py 

image

3.存檔:Ctrl+X、Y、Enter即可。

 

文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

Arduino雖然屬於C語言,但是很多副程式沒有包進去,最近要我拆解CSV檔案,也就是逗號分隔檔,發現Arduino沒有原生的split功能,本來想自己寫,但是Google一下就有了,在此付上


//此副程式用來拆解','分隔的字串
String getValue(String data, char separator, int index){
    int found = 0;
    int strIndex[] = { 0, -1 };
    int maxIndex = data.length() - 1;
    for (int i = 0; i <= maxIndex && found <= index; i++) {
        if (data.charAt(i) == separator || i == maxIndex) {
            found++;
            strIndex[0] = strIndex[1] + 1;
            strIndex[1] = (i == maxIndex) ? i+1 : i;
        }
    }
    return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}


使用時

String a1=getValue("aa,bb,cc",',',0);

就可以抓到aa了


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

網路真的太方便了,以前SSL要錢,還要定時手動更新,現在使用免費的SSL :Let’s Encrypt不僅可以免費,還可以自動定時更新憑證。
以下測試環境是Ubuntu20+Apache2

1. 申請SSL
 1.1 安裝certbot
       sudo apt install python3-certbot-apache
 1.2 申請SSL
       sudo certbot --apache -d abc.com.tw <-這是你的網域名稱
此時會問一堆問題
包括你的Mail, 還有一些選項,可以參考我下面的寫法
最後會有一個選項要選1或2
1:保留80port做非加密,再新增443做SSL
2:將80Port強制轉址到443,也就是80port幾乎無法使用了。
我這裡選擇2,也就是說如果有人輸入http://mqttgo.io,就會直接變成https://mqttgo.io
如果你不確定的話,可以建議使用"1"。
image

2. 自動更新
由於SSL 3個月到期,就要更新憑證,這裡可以安裝自動更新,語法如下:
sudo certbot renew --dry-run


夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

想知道ESP32如何進入睡眠嗎?
睡眠如何甦醒嗎?
睡眠有分多少層次嗎?
如何搭配電池讓時間持續最久嗎?
材料的可以購買本賣場「Lolin32深度睡眠研習套件」:https://shopee.tw/product/5742314/5422060939/
講義及範例程式網址:https://t.ly/3gen

課程主題:
1. Lolin32與電池管理
2. I2C OLED及Lolin32Lite
3. 睡眠種類
4. 喚醒方式
5. 輕度睡眠實做
6. 深度睡眠實做


一、ESP32睡眠種類

ESP32的工作模式一般可分成以下五種

image

Active正常模式:就是我們一般的運作狀態,可以開啟藍芽及WiFi
Modem-Sleep通訊關閉:就是指沒有啟動藍芽或WiFi的狀態,這個狀態並不是一個完整定義的工作模式,只是我們手動關閉通訊模組時的狀態,所以並沒有在ESP32的規格內

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

A brief visual history of the utopian De Stijl movement

把各種思想擬人化之一群奇怪的人
------------------------------------
「所以說,我們到底是誰,又是從哪裡來的?」,一個帶著眼鏡的男生認真的問
「哲學!不要再問這種深奧的問題了!快點幫我把這個畜生幹掉!」,一個生氣的女子毫不留情地向另外一位男子出拳。
「你才是呢!男人婆!女孩子就應該穿裙子玩芭比娃娃才對!」,被揍的男子反擊說道

「給我住手!」一個身穿綠色衣服的人衝了過去,將兩人拉開
「你們兩個!不要再打了!你們打架會讓呼吸變得急促,會消耗氧氣,增加炭排放,毀壞…」

「嗚嗚…我說的明明沒錯。」幾秒後,綠衣人摀著紅腫的頭部,他們兩個為甚麼要打我?

就在這時,又有人開門進來了。「蛤,環保,你為甚麼在哭?」這個人拿著鐵錘頭和鐮刀問到。
環保:「嗚嗚,就是那個女權…」

「不准哭!給我去工作!」拿著鐵頭的人忽然吼道,「敢休息就殺了你!你們兩個也是,給我過來!」

「真是的,怎麼會那麼吵,我各給你們一百萬,能安靜一點嗎?」又有人開門進來了,是個舉止優雅衣著華麗精緻的男子。
他看到了扭打在一團的男權和女權,還有拿著鐵錘往兩人身上揮的共產。環保在一旁哭泣,哲學似乎在嘀咕著甚麼。

「那個,不好意思,並不是我想找麻煩,不過你們這群可悲的窮人能安靜一點嗎?我要睡午覺。」男子說完後,世界彷彿安靜了下來,所有人都盯著他看。
幾秒後,環保和共產衝了過去。「資本,你給我站住!」
環保:「你們家開的工廠嚴重影響到地球生態了!給我關閉!」
共產:「環保你給我回去工作!...等等資本!你不要跑啊啊啊!」

這一切,都被路過的和平主義看到了。
「嗯…那個,我想我還是報警好了…」那名可愛的女子握住手機,身體止不住的顫抖。

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()