Showing posts with label Raspberry Pi. Show all posts
Showing posts with label Raspberry Pi. Show all posts

2021/07/02

在Raspberry Pi上玩MUD遊戲:建構FluffOS(driver)並運行各種mudlib,如East Story 2(東方故事2)

試著在Raspberry Pi 4 Model B上跑MUD,建構FluffOS(driver),並運行各種mudlib,如East Story 2東方故事2。若不清楚何謂MUD、driver、mudlib,請參閱維基百科LPMud

參考資料:


首先把Raspberry Pi OS(舊稱Raspbian)燒錄到MicroSD記憶卡,用的版本是「Raspberry Pi OS with desktop and recommended software, Release date: May 7th 2021」,檔名「2021-05-07-raspios-buster-armhf-full.img」,我是在Windows 10上使用燒錄軟體Rufus

我的Raspberry Pi沒有連接螢幕鍵盤滑鼠,都將以SSH連線操作。所以在燒錄後,需要在MicroSD記憶卡裡、名為boot的分割區,新增一支檔案、取名為「ssh」,如此一來,在第一次開機時Raspberry Pi OS就會啟動SSH功能。

開機後,我先執行「sudo raspi-config」進行相關設定,然後更新套件資訊、升級套件。因為我選用的Raspberry Pi OS版本預設已包含很多軟體,所以更新需要花比較多時間,讀者可試試預含軟體較少的精簡版

$ sudo apt update

$ sudo apt upgrade


安裝FluffOS需要的各種程式庫與工具:
$ sudo apt install build-essential cmake bison libevent-dev libpcre3-dev libssl-dev zlib1g-dev libjemalloc-dev libicu-dev libpq-dev libsqlite3-dev libmariadb-dev libmariadb-dev-compat libmariadbclient-dev libdw-dev binutils-dev

跟FluffOS官方網站不一樣的地方:把libz-dev換成zlib1g-dev,把mysql相關的套件改成maria(因為Debian自版本9 Stretch後,就改以maria取代mysql了),cmake改以apt安裝而非pip,多安裝了libdw-dev與binutils-dev。

以上的準備工作完成後,記憶卡容量約佔了7 GB。接下來進入正題,我會直接把FluffOS(driver)與各種mudlib(如ES2)放在家目錄底下(~/home/pi)。

首先建構FluffOS,抓取原始碼(約74 MB)與,得到子目錄fluffos:

$ git clone https://github.com/fluffos/fluffos

進入子目錄:

$ cd fluffos

選取版本,我用的是最新版,另可用指令「git tag」看看其他版本,需選用有標示v2019的版本:

$ git checkout master

建立存放建構檔案的目錄:

$ mkdir build

進入該目錄:

$ cd build

因為FluffOS採用cmake建構系統,先以底下指令產生所需組態設定檔,兩個句號「..」代表指向上一層目錄,也就是FluffOS所在目錄:

$ cmake ..

然後執行建構指令make,加上參數install就會在完成後進行安裝:

$ make -j4 install

完成後(產生出約274 MB的檔案),會在build目錄裡產生出子目錄bin,裡面有執行檔「driver」。


接著是各種mudlib,首先是東方故事2(East Story 2),先回到家目錄,然後下載(約13 MB),接著進入該目錄:

$ cd

$ git clone https://github.com/MudRen/ES2-utf8

$ cd ES-utf8

先看看設定檔「config.ini」,一般來說,維持預設值即可,底下列出幾個重要的:

name : East Story II

mud ip : 0.0.0.0

external_port_1 : websocket 8888

external_port_2 : telnet 5555

external_port_3 : telnet 6666

mudlib directory : .


name是遊戲名稱,mud ip是可供連線的IP位址,若為0.0.0.0代表皆可,external_port_1是可使用websocket連接的埠號,external_port_2是可使用telnet連接的埠號(GBK編碼),external_port_3是可使用telnet連接的埠號(UTF-8編碼),mudlib directory是遊戲內容所在處。

然後執行:

$ ~/fluffos/build/bin/driver config.ini

會輸出一堆訊息:

========================================================================

Full Command Line: /home/pi/fluffos/build/bin/driver config.ini

Boot Time: Fri Jul  2 21:18:47 2021

Version: fluffos v2019.20210429-18-g63292d32 (Linux)

jemalloc Version: 5.1.0-0-g61efbda7098de6fe64c362d309824864308c36d4

ICU Version: 63.1

Backtrace support: libdw.

Core Dump: No, Max FD: 65535.

========================================================================

Final Debug Level: 0

Processing config file: config.ini

New Debug log location: "log/debug.log".

Initializing internal stuff ....

Event backend in use: epoll

==== Runtime Config Table ====

...(省略)...

Loading simul_efun file : /adm/obj/simul_efun

]simul_efun loaded successfully.

Loading master file: /adm/obj/master

*Warning: unable to open stat file domain_stats for reading.

*Warning: unable to open stat file author_stats for reading.


Loading preload files ...

/adm/daemons/securityd...

/adm/daemons/virtuald...

/adm/daemons/logind...

/adm/daemons/cmd_d...

/adm/daemons/chinesed...

/adm/daemons/emoted...

/adm/daemons/aliasd...

/adm/daemons/fingerd...

/adm/daemons/channeld...

/adm/daemons/natured...

/adm/daemons/ftpd...

Accepting websocket connections on 0.0.0.0:8888.

Accepting telnet connections on 0.0.0.0:5555.

Accepting telnet connections on 0.0.0.0:6666.

Initializations complete.

若最後看到如上訊息,代表執行成功,便可使用telnet客戶端程式連線到埠號6666(UTF-8編碼)開始遊玩。哇,看到歡迎畫面囉:

註冊新玩家,進入第一站吧:

文字是簡體中文,看不習慣的朋友可試試ConvertZZ轉成繁體中文。

試試「俠客行100」:
回到家目錄,
$ cd
下載俠客行100的mudlib,
$ git clone https://github.com/MudRen/xkx100
另需下載子模組:
$ cd xkx100
$ git submodule init
$ git submodule update

然後執行:
$ ~/fluffos/build/bin/driver config.ini

若成功執行,便可使用telnet客戶端程式連線到埠號6666(UTF-8編碼)開始遊玩。哇,看到歡迎畫面囉: 

試試「泥潭7」,步驟與ES2相同,mudlib下載網址是https://github.com/MudRen/nt7:

試試「炎黄群侠传」,步驟與ES2相同,mudlib下載網址是https://github.com/oiuv/mud,建議使用git指令下載時,在尾端加個名字取為yhmud:
$ git clone https://github.com/oiuv/mud yhmud
其他適用於FluffOS v2019版的mudlib還有:风云2005西游记451小雨西游北大侠客行

2017/03/27

Raspberry Pi:六角塑膠柱組合四塊Model B+

之前曾以4塊Model B+板子,玩玩distccMPICH,但只用紙盒裝著板子,相當陽春;到電子材料行找找適當的組具,讓4塊板子合體吧。

Model B+與更新的rpi板子,其孔洞大小、板子高度,應該都差不多,所以皆可適用。

原裝紙盒。

Sense HAT的六角柱與螺絲,拿來試試看。
不行,高度不夠,因為Sense HAT並不會在USB埠和RJ-45網路埠之上。兩塊板子之間大約需相隔2公分。
到電子材料行,購買適當的塑膠六角柱,須注意其大小與高度,最簡便的做法是拿板子去實際試試。注意,Pi 1的孔洞較大,B+之後的孔洞較小一點。
比較,Sense HAT的螺絲較細,我買的較粗。
裝上4個底部,與1個位於中間的隔離柱。六角柱的螺絲部分,其粗細恰恰可符合Pi板子的孔洞,但有時因為誤差,需要以旋轉方式才能穿過,或是稍微施加推力。
疊上第2塊板子。
依樣畫葫蘆,裝上隔離柱與其他板子。
最後鎖上短短的、算是螺帽吧;圖中還有兩個沒鎖。
完成囉,躺下來看看。
立起來,側面照。
跟原本的比較。

2017/03/21

Raspberry Pi:RTC即時時鐘PCF8523

簡單記錄一下設定作業:Adafruit的RTC即時時鐘PCF8523電路板模組。其實這篇的內容,幾乎都是來自Adafruit的文件

PCF8523屬於便宜的RTC,若想要更好的,請選用DS1307(一般)或DS3231(很好)。

我的環境:Raspberry Pi 3,Raspbian  2017-03-02。

硬體線路,參看https://pinout.xyz/的腳位功能圖:

  • 實體腳位1(3.3V),接到PCF8523模組的VCC。
  • 實體腳位6(GND),接到PCF8523模組的GND。
  • 實體腳位3(SDA),接到PCF8523模組的SDA。
  • 實體腳位5(SCL),接到PCF8523模組的SCL。
照片。
然後執行raspi-config,進入選單5 Interfacing Options - P5 I2C,開啟I2C介面。
安裝所需模組:
$ sudo apt-get install python-smbus i2c-tools

執行i2cdetect測試,PCF8523模組的I2C位址是0x68。
$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

編輯 /boot/config,加入底下這行:
dtoverlay=i2c-rtc,pcf8523

重開機,再次執行,此時不會看到68,因為被系統拿去了。
$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

移除原本的虛擬硬體時鐘套件,註:之後我不知道怎麼恢復。
$ sudo apt-get -y remove fake-hwclock
$ sudo update-rc.d -f fake-hwclock remove

修改/lib/udev/hwclock-set,註解掉底下這三行:
#if [ -e /run/systemd/system ] ; then
# exit 0
#fi

執行raspi-config,進入選單4 Localisation Options - I2 Change Timezone,設定時區。
Current default time zone: 'Asia/Taipei'
Local time is now:      Sun Mar 19 11:15:30 CST 2017.
Universal Time is now:  Sun Mar 19 03:15:30 UTC 2017.

執行hwclock,讀取即時時鐘的資訊:
$ sudo hwclock -D -r
hwclock from util-linux 2.25.2
Using the /dev interface to the clock.
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
/dev/rtc does not have interrupt functions. Waiting in loop for time from /dev/rtc to change
...got clock tick
Time read from Hardware Clock: 2017/03/19 03:13:31
Hw clock time : 2017/03/19 03:13:31 = 1489893211 seconds since 1969
Sun 19 Mar 2017 11:13:31 AM CST  -0.431869 seconds

rpi應會上網抓取時間日期,下指令date看看是否正確。
$ date
Sun Mar 19 11:16:04 CST 2017

把日期時間、寫入即時時鐘。
$ sudo hwclock -w

看看對不對。
$ sudo hwclock -r
Sun 19 Mar 2017 11:17:38 AM CST  -0.588629 seconds

之後重開機,就會從即時時鐘抓日期時間。


參考資料:

2017/02/28

Raspberry Pi:Sense HAT開箱介紹

很早很早以前,有個Astro Pi計畫,把Raspberry Pi送上太空,加上感測元件,開放讓學生提交想執行的程式,嘿,可惜外人也只能光看乾瞪眼而已,後來,該計畫搭配的擴充板Sense HAT,變成商品開始銷售。

除了Raspberry Pi板子、Sense HAT與官方相機模組,還有那看起來金剛不壞的外殼,真帥,可惜沒賣。

最近買了Sense HAT這塊擴充板,可搭配的板子有Pi 3 / Pi 2 / Model B+ / Model A+,我使用Pi 3,試試吧,雖然已經不新鮮囉,呵呵。
 
規格如下:
  • 8×8 RGB LED矩陣
  • 含5個按鈕的搖桿
  • 溫度(temperature)感測器,0-65°C (Accurate ±2°C)
  • 相對濕度(humidity)感測器,20-80% rH (Accurate ±4.5%, in 15-40°C ±0.5°C)
  • 大氣壓力(barometric pressure)感測器,260 – 1260 hPa (Accurate ±0.1 hPa)
  • 加速計(accelerometer),±2/4/8/16 (g)
  • 磁力儀(magnetometer) ,±4/8/12/16 (gauss)
  • 陀螺儀(gyroscope),±245/500/2000 (dps)
  • 尺寸:65.1mm x 56.6mm x 13.9mm
  • 重量:20.4g
開箱,紙盒的正面與背面。
厚厚的安全手冊,因為有各國語言,嘿,太不環保了吧。
六角隔離柱與螺絲。
拿出放在防靜電袋裡的Sense HAT,終於看到本尊了。一眼就可看到8×8的LED矩陣,其右邊有顆晶片標示著「ACCEL/GYRO/MAG」,再往右則標示著「PRESSURE」與「HUMIDITY」,嗯,沒找到溫度的字樣。右下角是搖桿。上方是要插入Pi板子的40針腳。四個角落各有一個裝設孔。
背面照。
硬體安裝,對準插入,沒什麼好說的。
若要更穩固,加裝六角隔離柱與螺絲。
開機,LED矩陣會發光。
接下來安裝軟體部分,首先更新套件清單:
$ sudo apt-get update

然後安裝Sense HAT的程式庫:
$ sudo apt-get install sense-hat

照理說應該也會啟動I2C,若無,請自己執行raspi-config設定組態。然後重開機:
$ sudo reboot

軟體架構如下圖,有C/C++程式庫(RTIMULib)的部份,也有Python程式庫(python-sense-hat)。
剛剛安裝的套件裡,已經包含許多範例程式,位於/usr/src/sense-hat/examples,底下指令可複製該子目錄到自己的家目錄裡:
$ cp -R /usr/src/sense-hat/examples/ ~/

有Python範例程式、也有C/C++的,後者需要下指令make進行編譯,以RTIMULibDrive11為例,這支程式可測試Sense HAT擴充板的所有感測器:
$ cd ~/examples/RTIMULib/RTIMULibDrive11
$ make
$ ./RTIMULibDrive11

可看到類似下列的輸出訊息,有roll、pitch、yaw、氣壓、海平面高度、溫度、濕度、
Settings file not found. Using defaults and creating settings file
Detected LSM9DS1 at standard/standard address
Using fusion algorithm RTQF
Detected LPS25H at standard address
Detected HTS221 at standard address
min/max compass calibration not in use
Ellipsoid compass calibration not in use
Accel calibration not in use
LSM9DS1 init complete
Sample rate 0: : roll:-0.639063, pitch:-1.415285, yaw:-43.705342
Pressure: 1025.0, height above sea level: -97.7, temperature: 25.2, humidity: 53.8

第一行說找不到設定檔,會使用預設值並新增;另可複製預先校正過的設定檔,讓測量結果更為準確:
$ rm RTIMULib.ini
$ cp /etc/RTIMULib.ini ./

再次執行RTIMULibDrive11,輸出訊息如下:
Settings file RTIMULib.ini loaded
Using fusion algorithm RTQF
Detected LPS25H at standard address
Detected HTS221 at standard address
Using min/max compass calibration
Using ellipsoid compass calibration
Using accel calibration
LSM9DS1 init complete
Sample rate 0: : roll:0.503324, pitch:1.209912, yaw:-2.244175
Pressure: 1025.1, height above sea level: -97.9, temperature: 26.2, humidity: 53.3

發現roll、pitch、yaw的值的確差異甚大。若想自己校準,請參閱Sense HAT - Raspberry Pi Documentation

其他尚有許多範例程式,自己試試吧,如compass.py會以LED指出北方、rainbow.py與rotation.py各自秀出絢麗的動畫效果、text_scroll.py則是文字捲動,還有小遊戲snake貪食蛇。

自己動手寫寫程式,底下這支Python程式,會以LED矩陣營造跑馬燈效果,秀出文字「Hello Sense!」,影片在此(只有10秒而已)
from sense_hat import SenseHat
sense = SenseHat()
sense.show_message("Hello Sense!")

其實呢,Sense HAT有模擬器喔,在瀏覽器上頭就可以嘗試,嘿,真好:
若想在自己的Pi板子上頭執行模擬器,需要安裝底下的套件:
$ sudo apt-get install python-sense-emu python3-sense-emu python-sense-emu-doc sense-emu-tools

哈,看到囉;模擬器可加速開發速度,然而模擬終歸只是模擬。

接下來,想想要做些什麼吧,不如看看MagPiHackster.io,參考別人開發的專案。


參考資料:

2017/02/25

Raspberry Pi的「劍橋」佈景主題:桌布與螢幕保護程式

Raspberry Pi官方為PIXEL桌面環境增添風采,釋出「劍橋」佈景主題,包括桌布與螢幕保護程式,試試看吧。

包裝成套件形式,以底下指令進行安裝,可個別安裝:

$ sudo apt-get update
$ sudo apt-get install cantab-wallpaper
$ sudo apt-get install cantab-screensaver

其中cantab-screensaver約需200 MB的空間,請注意。

或者,以底下指令,通通安裝:
$ sudo apt-get update
$ sudo apt-get install cantab-theme

然後到Appearance Settings設定桌布,桌布圖檔位於/usr/share/pixel-wallpaper目錄裡,約有30多張。

底下列出其中三張,嗯,這是倫敦大橋吧。
美輪美奐圖書館。
懸崖峭壁。
然後到Preferences - Screensaver設定螢幕保護程式,選擇「Cantab」;記得選擇「Only One Screen Saver」。
底下列出其中三部分,大都是從下往上逐漸改變視角,俯瞰景點。
某教堂嗎?
某學院?
順帶一提,我的電源供應器似乎不穩定,正常時畫面應如下:
但有時會花掉,呵呵。

2017/02/10

Raspberry Pi:移除掉沒用到的套件

Raspberry Pi基金會官方釋出的Raspbian,為了方便初學者使用,放入許多套件,但其實我們可能都用不到,這篇試著移除一些沒用到的套件。

另一條路子是使用Raspbian Lite精簡版,但那麼一來,就必須自己安裝想要的套件。

我的環境是Raspberry Pi 3,Raspbian Jessie with PIXEL 2017-01-11。

燒錄、開機、raspi-config初始組態設定後,嘿,居然已經用了3.6G。
pi@raspberrypi:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  3.6G   11G  26% /
...其他省略...


讓我先更新套件,讓系統升級到最新版:
$ sudo apt-get update; sudo apt-get -y dist-upgrade

嘿, 居然佔用4.0G。
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  4.0G  9.9G  29% /

不過,因為下載的套件檔仍在,試著清除吧,也移除掉因相依關係而自動安裝的套件:
$ sudo apt-get clean
$ sudo apt-get autoremove --purge

嗯,其實沒多大變化。
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  3.6G   11G  26% /

然後,看看選單Programming裡頭,嘿,不需要的東西還不少啊。

以底下指令來移除套件,IBM的Node-RED、Mathematica、Scratch、Sonic Pi、Minecraft Pi。
$ sudo apt-get remove --purge --auto-remove nodered wolfram-engine scratch sonic-pi minecraft-pi

其中移除wolfram-engine應可拿回650MB的空間,scratch約100MB,sonic-pi約200MB,

再移除兩套Java IDE:BlueJ與Greenfoot,一套輕量型IDE:Geany。
$ sudo apt-get remove --purge --auto-remove bluej greenfoot geany

移除掉Sense HAT Emulator:
$ sudo apt-get remove --purge --auto-remove python-sense-emu python3-sense-emu python-sense-emu-doc sense-emu-tools

移除掉Email軟體Claws Mail、瀏覽器Chromium(可釋放出約200MB的空間)、瀏覽器Epiphany、瀏覽器Dillo。
$ sudo apt-get remove --purge --auto-remove claws-mail chromium-browser rpi-chromium-mods epiphany-browser dillo

當我移除掉Chromium和Ephiphany,發現還有Dillo,第一次看到這玩意。
都移除掉以後,想開啟瀏覽器的話,就會出現錯誤囉。
如果你不需要的話,也可移除掉很大的Libre Office,記得加上星號,才會移除掉全部:
$ sudo apt-get remove --purge --auto-remove libreoffice*

最後看看,從3.6G降到2.1G,還不錯。
pi@raspberrypi:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  2.1G   12G  15% /


其實也不是非移除不可,既然內建、那就放著就好了,但是想更新套件時,常常會需要連帶更新一堆東西,很煩,若能把不需要的先移除,就能減少需要更新的東西。

2017/02/05

Raspberry Pi:遠端桌面連線與VNC

Raspberry Pi 3與Raspbian(2017-01-11),重新燒錄、全新安裝,試著透過遠端桌面連線與VNC進行遠端操控。

第一次開機,會自動擴展記憶卡分割區,並且重開機,很快,可能沒看到。之後開機會看到四顆樹梅水果。

以前開機後,預設是到命令列模式,如下圖。
現在開機後,預設會進入X視窗系統,自2016-09-23起,採用新的桌面環境PIXEL。
注意,自2016-11-25起,Raspbian再預設開啟SSH伺服器(很怪的決定),但可以在第一次開機之前,把記憶卡放進別台電腦,在第一個分割區(Windows應只看得到一個)裡,放入一支檔名為「ssh」的空檔案,這樣預設就會啟動SSH伺服器。

藉由實體連接的螢幕,進入X視窗。
有個警告訊息,意思是說,SSH已開啟,但預設帳號pi的密碼尚未更改。
咦,右上角怎麼有個閃電圖示?這是因為我的電源供應不穩定,電壓過低;以前會顯示彩虹方塊。
實體主控台(實際連接的螢幕鍵盤滑鼠)進入X視窗後,可進入組態選單,自己啟動VNC伺服器(RealVNC)。

然後,從別台Windows 10電腦,使用VNC客戶端(下圖是RealVNC的VNC Viewer),填入rpi的IP位址。
就可從遠端操控桌面了。
以前都是在命令列模式下,使用指令raspi-config設定組態
自2015-09-25起,在GUI畫面裡,也有組態選單囉。

修改密碼、主機名稱、開機後要進入視窗畫面還是命令列模式、要不要自動登入、開機時是否等待網路連線、開機畫面、螢幕解析度、Underscan設定。
存取介面,視情況開啟。
超頻,以及要分多少記憶體給GPU。
區域設置、時區、鍵盤配置、WiFi國家。
接下來,試著以「遠端桌面連線」登入吧,先以底下指令安裝RDP伺服器
$ sudo apt-get install xrdp

然後叫出「遠端桌面連線」的客戶端,Windows電腦應已內建。
奇怪,出現login successful的字樣,後面又出現error - problem connecting的字樣。
原因在於,Raspbian預設內建的RealVNC伺服器,與剛剛安裝的xrdp起衝突,唉。解決辦法之一是另行安裝TightVNC伺服器,指令如下:
$ sudo apt-get install tightvncserver

然後就可以了。
但系統預設的VNC伺服器也不見了,也不是消失無蹤,而是預設不啟動了。此時想以VNC操控,就會失敗。
不過只要自己在命令列下打指令,啟動TightVNC伺服器:

$ tightvncserver

就可運作,但輸入IP位址時,要加上「:1」,簡單的說,:0代表實體連接的螢幕,而剛剛的指令會開出另一個螢幕:1。
若想關閉TightVNC伺服器,或是想開機後自動啟動,請參閱「Raspberry Pi:VNC伺服器之TightVNC」。


參考資料: