SSブログ

途中まで実装しました [電子工作]

到着した基板に部品を実装しました。相変わらずチップ部品の半田付けは汚いです。今回は、きちっとケースも作るついでに、配線もコネクタを付けて実装する予定です。コネクタは家にないので、aitendoさんに注文しました。コネクタの実装は来週以降になりそうです。取り付け用の穴は、空いていないので自分でドリルであけました。

DSC_0017.JPG

ライブラリを作成(コンポーネント) [DesignSpark PCB]

回路図で使う部品とPCBで使う部品をまとめてコンポーネントを作成します。Librariesボタンを押します。

CompSym1.JPG

Library Managerが起動するので、Wizardボタンを押します。

CompSym2.JPG

ウイザードが開始されます。次へボタンを押します。

CompSym3.JPG

Normal Componetを選択します。

CompSym4.JPG

Component Nameに名前を設定します。Component Pinsは16です。

CompSym5.JPG

アールエスコンポーネンツさんの製品番号をいれていないとでるので、OKボタンを押します。

CompSym6.JPG

回路図で使用する作成した部品を選択します。

CompSym7.JPG

PCBで使用する作成した部品を選択します。

CompSym8.JPG

回路図で使用する作成した部品とPCBで使用する作成した部品のピン番号は一致しているので、Assign 1-to-1ボタンを押します。Pin Nameにつける名前をTerminal Nameに設定します。

CompSym9.JPG

保存するライブラリを選択して完了ボタンを押します。

CompSym10.JPG

問題なければ保存して終了です。

CompSym11.JPG

これで回路図とPCBで使うコンポーネントの登録が完了しました。

基板が届きました [電子工作]

結局、基板はスイッチサイエンスさんに発注していました。発注から基板到着まで3週間弱でした。基板に部品を実装して動作確認をしたいと思います(最近老眼で、チップ部品のハンダ付けが難しくなってきました)。
DSC_0016.JPG

ライブラリを作成(PCB) [DesignSpark PCB]

つぎにPCBに必要な部品を作成します。Librarieseボタンを押します。

PCBSym1.JPG

Library Manager画面が開くので、PCB Symbolsを選択し、Wizardボタンを押します。

PCBSym2.JPG

ウィザードが開始されます。次へボタンを押します。

PCBSym3.JPG

UnitをEnglish、milを選択します。Precisionは0です。次へボタンを押します。

PCBSym4.JPG

DIPを選択します。次へボタンを押します。

PCBSym5.JPG

ピンの本数は8×2なので16本、Pad Countsに16を設定します。Mesurementsのeが100、Eが1100に設定します。次へボタンを押します。

PCBSym6.JPG

次へボタンを押します。

PCBSym7.JPG

次へボタンを押します。

PCBSym8.JPG

Footprint Nameに値を設定し、完了ボタンを押します。

PCBSym9.JPG

メニューバーのsettingsメニューからUnitsを選択します。

PCBSym10.JPG

Unitsをmil、Precisionを0に設定してOKボタンを押します。

PCBSym11.JPG

Gridsボタンを押します。

PCBSym12.JPG

Step Sizeを100mil、Snap ModeをTenth Gridに設定してOKボタンを押します。

PCBSym13.JPG

Toggle Screen Gridを押して、グリッドを表示させます。

PCBSym14.JPG

ウイザードで作成された部品はグリッド上と一致していません。マウスを左上でクリックしてそのまま右下まで動かして部品を全選択します。

PCBSym15.JPG

マウスのスクロールで拡大し、1番ピンを選択してグリッド上になるように移動させます。

PCBSym16.JPG

Pin Nameを全選択して、右クリックのメニューからRotate One Stepを選択します。選択したものが、反時計回りに90度回転します。

PCBSym17.JPG

以下のようになります。

PCBSym18.JPG

部品下のPin Nameをすべて選択します。

PCBSym19.JPG

選択したまま移動させます。

PCBSym20.JPG

部品上部のPin Nameも同様に移動させます。選択状態で右クリックのメニューからPropatiesを選択します。

PCBSym21.JPG

Propertiesダイアログで、ALignmentをRightに設定し、OKボタンを押します。

PCBSym22.JPG

右寄せになりました。

PCBSym23.JPG

WROOM02のアンテナ部分があるので、1番ピン寄りの外形を広げます。線を選択状態にします。

PCBSym24.JPG

そのまま、マウスをクリックしたまま左に移動させます。できました。

PCBSym25.JPG

印刷して実物と比べます。メニューバーのFileメニューからPrintを選択して印刷します。

PCBSym26.JPG

問題なさそうです。

DSC_0015.JPG

次に回路図で使う部品とPCBで使う部品を1つのコンポーネントとして作成します。

ライブラリを作成(回路図) [DesignSpark PCB]

スイッチサイエンスさんから、WROOM02変換基板(https://www.switch-science.com/catalog/2362/)と温度、湿度、気圧のセンサー(https://www.switch-science.com/catalog/2236/)を買いました。

DSC_0014.JPG
基板は作成しませんがユニバーサル基板で組むために、回路図と配線図を作るためにライブラリを作成します。DesignSparkを起動します。Libraliesボタンを押します。

SchSym1.JPG

Library Manager画面が開くので、Schematic Symbolsタブを選択します。New Itemボタンをおします。

SchSym2.JPG

新しくタブが開きます。

SchSym3.JPG

作成するライブラリ(回路図)のサイズ単位を設定するため、メニューバーのsettingsメニューのunitsを選択します。

SchSym4.JPG

Unitsダイアログが表示されるるので、milを設定します。OKボタンを押します。

SchSym5.JPG

グリッドの設定をするのでGridsボタンを押します。

SchSym6.JPG

Gridsダイアログが表示されるので、以下のように設定します。

SchSym7.JPG

Toggle Screen Gridボタンを2回おしてグリッドを再表示させます。

SchSym8.JPG

部品の配線の接続点を作成するために、Add Padボタンを押します。

SchSym9.JPG

マウスポインタが×印になるので、グリッド上に配置します。

SchSym10.JPG

今回作る部品は、変換基板ですので、8回マウスをクリックして×印を配置します。

(画像は1番ピン、9番ピンが上になっていますが、反時計周りにしたほうがよいです。あとで修正しました。)


SchSym11.JPG

部品の外形を書きます。Add Shape Rectangleボタンを押します。

SchSym12.JPG

接続点を内側に外形を書きます。

SchSym13.JPG

外形と接続点を線で結びます。Add Shape Single Lineボタンを押します。

SchSym14.JPG

接続点の×印上のグリッドをクリックし、外形上のグリッドをクリックして線を引きます。

SchSym15.JPG

全ての接続点と外形を以下のように線で結びます。

SchSym16.JPG

GridのSnap ModeをQuarter Gridに変更します。

SchSym17.JPG

接続点に近くにある数字(Pin Number)の+印をクリックします。

SchSym18.JPG

CTRLキーを押しながら、部品の左側にあるPin Numberの+印をクリックして選択状態にします。
SchSym19.JPG

選択状態になったPin Numberを右クリックしながら移動させます。

SchSym20.JPG

選択状態のまま、右クリックのメニューから、Proprtiesを選択します。

SchSym21.JPG

Propertiesダイアログが開くので、AlighmentをRightに変更します。

SchSym22.JPG

見た目あまり変わっていないですが、右寄せになります。

SchSym23.JPG

同様に部品の右側のピン番号を移動させ、左寄せします。

SchSym24.JPG

1番の接続点にS印があります。

SchSym25.JPG

これを選択して部品の中央に寄せます。これは部品名等の情報位置を表す印です。

SchSym26.JPG

Pin Nameも同様に選択します。

SchSym27.JPG

Pin Nameも同様に、部品の左側を右寄せ、部品の右側を右寄せします。

SchSym28.JPG

接続点と部品の外形に書いた線をCTRLキーを押しながら全て選択します。右クリックのメニューから、Propertiesを選択します。

SchSym29.JPG

Properiesダイアログが開くので、StyleをNormalに変更します。

SchSym30.JPG

出来上がりの全体像は、以下のようになります。

SchSym31.JPG

できた回路図の部品を保存します。Saveボタンを押します。

SchSym32.JPG

Save To LibraryダイアログでSymbol Nameに名前を入れてOKボタンを押します。

SchSym33.JPG

次はPCBの部品を作成します。

ガーバデータの出力 [DesignSpark PCB]

基板を発注(スイッチサイエンスさん https://www.switch-science.com/ の基板製造サービス スイッチサイエンスPCB)するためにガーバデータを出力します。PCBを表示した状態で、メニューバーのOUTPUTメニューからManufacturing Plotsを選択します。

DR1.JPG

ダイアログが表示されるので、Plotsのチェックボックスを以下の通りに選択します。

DR2.JPG

Add plotボタンを押すとChose Device Typeダイアログが表示されるので、Gerberボタンを押します。

DR3.JPG

ダイアログにPlot1が追加されます。

DR4.JPG

PlotNameに「Bottom Silkscreen」と入力します。

DR5.JPG

Layersタブを選択します。

DR6.JPG

Bottom Silkscreenをダブルクリックして、NからYに変更します。

DR7.JPG

もう一度、Add Plotボタンを押下します。

DR8.JPG

Gerberボタンを押します。Plot Nameに「Outline」と入力します。

DR9.JPG

Layesタブで、Board OutlineをダブルクリックしてNからYに変更します。

DR10.JPG

以下のようにCTRLキーを押しながらPlotを選択します。

DR11.JPG

Optionsボタンを押します。ダイアログが開きます。Device SetupのGerberボタンを押します。

DR12.JPG

以下の通りになっているか確認します。OKボタンを押します。

DR13.JPG

PlotsのDril Dataを選択してOptionsボタンを押します。

DR14.JPG

ダイアログが表示されるのでGerberボタンを押します。

DR15.JPG

以下の内容になっているか確認してOKボタンを押します。

DR16.JPG

PlotsのDril Dataを選択して、settingタブを選択し、以下の内容になっているか確認します。

DR17.JPG

plotsのOutlineを選択して、settingタブを選択し、以下の内容になっているか確認します。

DR23.JPG

ガーバデータを出力するために、Runボタンを押すと、回路図とPCBのファイルがあるフォルダにガーバデータが出力されます。

DR18.JPG

ファイル名を以下のように変更します。

chip_pcm5102dac - Bottom Copper.gbr → chip_pcm5102dac.GBL
chip_pcm5102dac - Bottom Silkscreen.gbr → chip_pcm5102dac.GBO
chip_pcm5102dac - Bottom Solder Mask.gbr → chip_pcm5102dac.GBS
chip_pcm5102dac - Drill Data - [Through Hole].drl → chip_pcm5102dac.TXT
chip_pcm5102dac - Outline.gbr → chip_pcm5102dac.GML
chip_pcm5102dac - Top Copper.gbr → chip_pcm5102dac.GTL
chip_pcm5102dac - Top Silkscreen.gbr → chip_pcm5102dac.GTO
chip_pcm5102dac - Top Solder Mask.gbr → chip_pcm5102dac.GTS

以下のようになります。

DR19.JPG

ファイル名と同じフォルダを作成します。

DR21.JPG

ファイルを選択して作成したフォルダに移動させます。そしてフォルダごとZIP圧縮します。

DR22.JPG

これで発注します。
申し込みの画面でZIPファイルをアップロードしてガーバデータが表示されるのを確認して申し込みします。

DR24.JPG

DR25.JPG


PCBを修正 [DesignSpark PCB]

つぎにPCBを修正します。DSを起動し、PCBを表示させます。

PCB11.JPG

ベタアースがあるのでいったん削除します。ベタアースを選択し、右クリックのメニューからclear Copperを選択します。

PCB12.JPG

Copper Pour Areaの外形を選択します。

PCB13.JPG

Delキーで領域を削除します。つぎに、基板のサイズ確認をするため、単位をmmに変更します。 メニューバーのsettingメニューからunitを選択します。

PCB14.JPG

表示されるダイアログで単位をmmに変更します。

PCB15.JPG

Gridsボタンを押下します。

PCB16.JPG

stepサイズを1,0mm、SNAPモードをGridにします。

PCB17.JPG

Toggle Screen Gridボタンを2回押してグリッドの表示を変更します。

PCB18.JPG

現在のグリッドの表示は、10mmづつ表示されます。

PCB19.JPG

マウスのスクロールで拡大すると、グリッドは先ほど設定した1mmで表示されます。外形をクリックしてサイズを修正します。

PCB21.JPG

1mmサイズを大きくしました。

PCB22.JPG

このようにして基板の外形のサイズやボタンの位置を変更します。stepサイズやGridモードを変更し、 位置を調整します。
つぎに、回路図にコネクタを追加したので、PCBに変更と取り込みます。回路図を選択し、メニューバーのToolsメニューからForward Design Changesを選択します。

PCB23.JPG

ダイアログが表示されるので、OKを選択します。

PCB24.JPG

PCB上にコネクタが配置されます。

PCB25.JPG

単位をmilに変更します。

PCB26.JPG

Gridsも変更しておきます。

PCB27.JPG

コネクタの配置する部分を拡大します。

PCB28.JPG

移動する配線を選択してマウスでクリックして移動させます。

PCB29.JPG

もう1本も移動します。コネクタを入れるスペースができました。

PCB30.JPG

コネクタの外形をマウスで左クリックで選択します。

PCB31.JPG

右クリックからメニューを表示し、RotateのRotate Step Backを選択します。

PCB32.JPG

コネクタが回転して配置されます。

PCB33.JPG

コネクタをマウスで左クリックしたまま、配置する場所まで移動させます。置く場所に配線があるので移動させます。

PCB34.JPG

マウスの左クリックで選択し、移動させます。

PCB35.JPG

同様にコネクタも移動させておきます。次に配線をするので、左のショートカットからAdd Trackを選択します。

PCB36.JPG

配線開始のランドの中心をクリックして、マウスを終点のランドまで移動させます。

PCB37.JPG

終点のランドでクリックすると配線完了です。

PCB38.JPG

残りのランドも配線します。

PCB39.JPG

配線が終わったのでDesign Rule Checkを実行します。メニューバーのToolsメニューのDesign Rule Checkを選択します。

PCB40.JPG

ダイアログが表示されるので、checkボタンを押して実行します。

PCB41.JPG

デザインルールが正常かどうかチェックされます。実行するとメモ帳が開き実行結果が表示されます。

PCB42.JPG

conn5のシルクがパッドとかぶっているので、回転させます。conn5をマウスの左クリックで選択し、右メニューからRotetoを選択します。

PCB43.JPG

回転されます。

PCB44.JPG

移動させます。

PCB45.JPG

再度、Desgin Rule Checkを実行し、エラーが解消されたのを確認します。GNDはベタアースで配線するのでそのままにしておきます。

PCB46.JPG

ベタアースの外形を決めます。メニューバーのAddメニューからCopper Pour AreaからRectangleを選択します。

PCB47.JPG

マウスで、始点から左クリックしたまま、終点までマウスを移動させます。

PCB48.JPG
外形を選択し、マウスの左クリックで移動させたりして微調整します。

PCB49.JPG

ベタアースを書きます。Copper Pour Area内で右クリックのメニューからPour Copperを選択します。

PCB50.JPG

ダイアログが表示されるのでGNDを選択し、OKボタンを押します。

PCB51.JPG

ベタアースが配置されます。

PCB52.JPG

Desgin Rule Checkをもう一度実行してエラーが解消されたのを確認します。

PCB53.JPG

完成したので、原寸で印刷して穴の位置など確認しましょう。メニューバーのFileメニューからPrintを選択します。

PCB54.JPG

ダイアログが表示されるので、100%になっているのを確認してOKボタンを押して印刷します。

PCB55.JPG

前回、コネクタの位置を間違えて微妙にずれた位置に加工されてしまいましたが、今回は大丈夫だといいな、と思っています。

回路図を修正 [DesignSpark PCB]

今のDACのPCBには、GPIOボタンへの引き出し用コネクタがありません。基板を発注するかはまだ未定ですが、回路図とPCBを更新したいと思います。まずは回路図からです。
DSを起動します。以前回路図とPCBを開いたので、自動的に開きます。

DS5.JPG

部品を追加するので、インタラクションバーを表示させます。メニューバーからViewメニューの、Intreraction Barを選択します。

DS6.JPG

インタラクションから、Add Componentタブを選択します。

DS7.JPG

部品を追加するので既存の部品を移動させます。部品の外形をクリックして、マウスで移動させます。

DS8.JPG

インタラクションのAdd Componentタグで表示される部品から、挿入する部品を選択し、回路図にドラックアンドドロップします。

DS9.JPG

部品の向きを右に変えます。部品の外形をマウスで選択し、右クリックのメニューからFlipを選択します。

DS10.JPG

向きが変わります。

DS11.JPG

右クリックでメニューからプロパティを選択し、コンポーネント名、パッケージ名のチェックボックスを外します。

DS13.JPG

配線を書きます。Add Schematic Connectionを選択します。

DS14.JPG

部品の×印をクリックして配線します。

DS15.JPG

配線が終わりました。

DS16.JPG

次はPCBです。

Volumio2で音楽5 [Volumio]

有機ELディスプレイに曲名や歌手名を出すためにプログラムを書きます。
root@volumio:~# /var/tmp/mkinitramfs_8pJogT/bin/vi SSD1306.py

以下のプログラムを書きます。
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import sys
import smbus
import time
import signal
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
from socketIO_client import SocketIO

PIDFILE='/var/run/SSD1306.pid'

class SSD1306(object):

	DISPLAYOFF = 0xAE
	DISPLAYON = 0xAF
	DISPLAYALLON = 0xA5
	DISPLAYALLON_RESUME = 0xA4
	NORMALDISPLAY = 0xA6
	INVERTDISPLAY = 0xA7
	SETREMAP = 0xA0
	SETMULTIPLEX = 0xA8
	SETCONTRAST = 0x81
	CHARGEPUMP = 0x8D
	COLUMNADDR = 0x21
	COMSCANDEC = 0xC8
	COMSCANINC = 0xC0
	EXTERNALVCC = 0x1
	MEMORYMODE = 0x20
	PAGEADDR = 0x22
	SETCOMPINS = 0xDA
	SETDISPLAYCLOCKDIV = 0xD5
	SETDISPLAYOFFSET = 0xD3
	SETHIGHCOLUMN = 0x10
	SETLOWCOLUMN = 0x00
	SETPRECHARGE = 0xD9
	SETSEGMENTREMAP = 0xA1
	SETSTARTLINE = 0x40
	SETVCOMDETECT = 0xDB
	SWITCHCAPVCC = 0x2    
	
	OLED_WIDTH      = 128
	OLED_HEIGHT     =  64
	OLED_PAGE_COUNT =   8
	OLED_SIZE       = ( OLED_WIDTH , OLED_HEIGHT )
	
	OLED_TARGET     = 0x3C
	OLED_CMDMODE    = 0x00
	OLED_DATAMODE   = 0x40
	
	def command(self, *cmd):
		self.__bus.write_i2c_block_data(self.OLED_TARGET,self.OLED_CMDMODE,list(cmd))
	
	def cleanup(self):
		self._hide()
		self.clear()
		self.__bus.close()
	
	def clear(self):
		self.display(Image.new("1",self.OLED_SIZE))
	
	def show(self):
		self.command(self.DISPLAYON)
	
	def hide(self):
		self.command(self.DISPLAYOFF)
		
	def contrast(self,level):
		self.command(self.SETCONTRAST,level)
	
	def __init__(self):
		self.buffer = [0] * self.OLED_PAGE_COUNT * self.OLED_WIDTH;

		self.__bus = smbus.SMBus(1)
		
	def init(self):
		self.command(
			self.DISPLAYOFF,
			self.SETDISPLAYCLOCKDIV, 0x80,
			self.SETMULTIPLEX,       0x3F,
			self.SETDISPLAYOFFSET,   0x00,
			self.SETSTARTLINE,
			self.CHARGEPUMP,         0x14,
			self.MEMORYMODE,         0x00,
			self.SETSEGMENTREMAP,
			self.COMSCANDEC,
			self.SETCOMPINS,         0x12,
			self.SETPRECHARGE,       0xF1,
			self.SETVCOMDETECT,      0x40,
			self.DISPLAYALLON_RESUME,
			self.NORMALDISPLAY)
		self.contrast(0xCF)
		self.clear()
		self.show()
	
	def display(self,image):

		pix = image.load()
		index = 0
		for page in range(8):
			for x in range(128):
				bits = 0
				for bit in [0, 1, 2, 3, 4, 5, 6, 7]:
					bits = bits << 1
					bits |= 0 if pix[(x, page*8+7-bit)] == 0 else 1
				self.buffer[index] = bits
				index += 1
		
		self.command(self.COLUMNADDR, 0x00, 128-1, self.PAGEADDR, 0x00, 8-1)
		
		for i in range(0, len(self.buffer), 16):
			self.__bus.write_i2c_block_data(self.OLED_TARGET,self.OLED_DATAMODE,self.buffer[i:i+16])
		

class socketio(object):

	def __init__(self):
		self.album = ''
		self.title = ''
		self.artist= ''
		self.samplerate = ''
		self.bitdepth   = ''
		
	def init(self):
		self.socketIO = SocketIO('localhost', 3000)
		self.socketIO.on('pushState', self.on_pushState)
		self.ssd = SSD1306()
		self.ssd.init()
	
	def max_length(self,font,text):
		length = len(text)
		for i in range(0,length-1,1):
			w = font.getsize(text[0:i])[0]
			if w > 128:
				return i + 1
		return length
	
	def on_pushState(self,args):
	
		s = ''
		b = ''
		
		if 'samplerate' in args :
			s = args['samplerate']
		else:
			s = ''
			
		if 'bitdepth' in args:
			b = args['bitdepth']
		else:
			b = ''

		if self.album == args['album'] and self.title == args['title'] and self.artist == args['artist'] and self.samplerate == s and self.bitdepth == b :
			return
			
		self.album = args['album']
		self.title = args['title']
		self.artist= args['artist']
		self.samplerate = s
		self.bitdepth   = b
	
		image = Image.new('1', (self.ssd.OLED_WIDTH, self.ssd.OLED_HEIGHT),0)
		draw = ImageDraw.Draw(image)
		draw.rectangle((0,0,self.ssd.OLED_WIDTH-1, self.ssd.OLED_HEIGHT-1), outline=0, fill=0)
		jpfont = ImageFont.truetype('/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf',12, encoding="unic")
		
		draw.text((0,0 ), self.album , font=jpfont, fill=1)
		e = 0
		length = len(self.title)
		e = self.max_length(jpfont,self.title)
		if e < length:
			draw.text((0,12), self.title[0:e-2] , font=jpfont, fill=1)
			draw.text((0,24), self.title[e-2:length] , font=jpfont, fill=1)
		else:
			draw.text((0,12), self.title , font=jpfont, fill=1)
			
		draw.text((0,36), self.artist, font=jpfont, fill=1)
		
                if 'samplerate' in args and 'bitdepth' in args:
                        f = '%s | %s' % (self.samplerate, self.bitdepth)
                        #draw.text((0,50), str(self.samplerate) + '|' + str(self.bitdepth), font=jp
                        draw.text((0,50), f, font=jpfont, fill=1)
                else:
                        draw.text((0,50), '', font=jpfont, fill=1)

                self.ssd.display(image)

                print('-----')
                print(self.album.encode('utf-8'))
                print(self.title.encode('utf-8'))
                print(self.artist.encode('utf-8'))
                if 'samplerate' in args and 'bitdepth' in args:
                        #print(str(self.samplerate) + "|" + str(self.bitdepth))
                        print(f)
                else:
                        print('-NaN-')
                print('-----')

	def setRandom(self):
		self.socketIO.emit('setRandom',{'value' : 'true'})
		self.socketIO.emit('getState')
		while True:
			self.socketIO.wait(seconds=1)

def main_loop():
	volumio = socketio()
	volumio.init()
	volumio.setRandom()
	os.remove(PIDFILE)
	sys.exit()


def signal_handler(signal,handler):
	os.remove(PIDFILE)
	sys.exit()

def daemonize():
	pid=os.fork()
	if pid > 0:
		pidf = open(PIDFILE,'w')
		pidf.write(str(pid)+'\n')
		pidf.close()
		sys.exit()

	if pid == 0:
		signal.signal(signal.SIGINT, signal_handler)
		signal.signal(signal.SIGTERM, signal_handler)
		main_loop()

if __name__ == '__main__':
	daemonize()

次に、起動時にデーモンとして動くように登録します。
root@volumio:~# /var/tmp/mkinitramfs_8pJogT/bin/vi /etc/systemd/system/ssd1306.service

以下の入力します。
[Unit]
Description=Volumio2 SSD1306 display

[Service]
ExecStart=/root/SSD1306.py
Restart=always
Type=forking
PIDFile=/var/run/SSD1306.pid

[Install]
WantedBy=multi-user.target

コマンドを入力して有効にします。
root@volumio:~# chmod +x SSD1306.py
root@volumio:~# systemctl enable ssd1306.service

再起動すれば、アルバム名、曲名、歌手名、サンプルレートが表示されます。

DesignSpark PCB8.0で7.2で作ったファイルを開いてみる [DesignSpark PCB]

ライブラリも無事に移行できたので、7.2で作った回路図とPCBが開くか確認してみます。
DesignSpark PCBを起動し、ファイルを開きます。
DS1.JPG
ファイルを選択します。CTRLキーを押しながら2つのファイルを選択します。
DS2.JPG
回路図もちゃんと表示できているようです。
DS3.JPG
PCBも大丈夫そうです。
DS4.JPG
これで安心して作業できます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。