88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"image/color"
|
||
|
"machine"
|
||
|
"time"
|
||
|
|
||
|
"tinygo.org/x/bluetooth"
|
||
|
"tinygo.org/x/drivers/st7789"
|
||
|
"tinygo.org/x/tinyterm"
|
||
|
"tinygo.org/x/tinyterm/fonts/proggy"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
display st7789.Device
|
||
|
terminal = tinyterm.NewTerminal(&display)
|
||
|
|
||
|
black = color.RGBA{0, 0, 0, 255}
|
||
|
font = &proggy.TinySZ8pt7b
|
||
|
|
||
|
adapter = bluetooth.DefaultAdapter
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
initDisplay()
|
||
|
time.Sleep(time.Second)
|
||
|
|
||
|
fmt.Fprintf(terminal, "\nenable interface...")
|
||
|
println("enable interface...")
|
||
|
must("enable BLE interface", adapter.Enable())
|
||
|
time.Sleep(time.Second)
|
||
|
|
||
|
println("start scan...")
|
||
|
fmt.Fprintf(terminal, "\nstart scan...")
|
||
|
|
||
|
must("start scan", adapter.Scan(scanHandler))
|
||
|
|
||
|
for {
|
||
|
time.Sleep(time.Minute)
|
||
|
println("scanning...")
|
||
|
fmt.Fprintf(terminal, "\nscanning...")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func scanHandler(adapter *bluetooth.Adapter, device bluetooth.ScanResult) {
|
||
|
println("device:", device.Address.String(), device.RSSI, device.LocalName())
|
||
|
fmt.Fprintf(terminal, "\n%s %d %s", device.Address.String(), device.RSSI, device.LocalName())
|
||
|
}
|
||
|
|
||
|
func must(action string, err error) {
|
||
|
if err != nil {
|
||
|
for {
|
||
|
println("failed to " + action + ": " + err.Error())
|
||
|
time.Sleep(time.Second)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func initDisplay() {
|
||
|
machine.SPI1.Configure(machine.SPIConfig{
|
||
|
Frequency: 8000000,
|
||
|
SCK: machine.TFT_SCK,
|
||
|
SDO: machine.TFT_SDO,
|
||
|
SDI: machine.TFT_SDO,
|
||
|
Mode: 0,
|
||
|
})
|
||
|
|
||
|
display = st7789.New(machine.SPI1,
|
||
|
machine.TFT_RESET,
|
||
|
machine.TFT_DC,
|
||
|
machine.TFT_CS,
|
||
|
machine.TFT_LITE)
|
||
|
display.Configure(st7789.Config{
|
||
|
Rotation: st7789.ROTATION_180,
|
||
|
Height: 320,
|
||
|
FrameRate: st7789.FRAMERATE_111,
|
||
|
VSyncLines: st7789.MAX_VSYNC_SCANLINES,
|
||
|
})
|
||
|
display.FillScreen(black)
|
||
|
|
||
|
terminal.Configure(&tinyterm.Config{
|
||
|
Font: font,
|
||
|
FontHeight: 10,
|
||
|
FontOffset: 6,
|
||
|
})
|
||
|
}
|