Giter Site home page Giter Site logo

jbert's Introduction

The jbert Project

Idea

The Hörbert (https://www.hoerbert.com) is cool but too expensive and not flexible enough.

The Toniebox (https://tonies.de) is cool, but the tonies are too expensive.

Prototype Hardware #1

Audio player with 9 buttons and a RFID reader to control the audio playback.

jbert prototype #1

Hardware Components

  • Raspberry Pi Zero W (AliExpress)
  • Waveshare WM8960 Hi-Fi Sound Card HAT for Raspberry Pi, with speakers (AliExpress)
  • MFRC522 RFID Reader (AliExpress)
  • RFID chips (AliExpress)
  • Buttons (AliExpress)
  • USB-B jack (AliExpress)
  • Jumper calbes (AliExpress)
  • Samsung Evo+ microSD UHS-I (32GB, Class 10) (https://www.digitec.ch)
  • Micro USB calbes (private stock)
  • Powerbank (present from Spital Uster (https://www.spitaluster.ch))
  • Housing, rotho tupperware (Migros)

Software

The list is not complete.

How-To

Install Raspbian

  • Copy the Raspbian system to the microSD card (Tested with 2019-07-10-raspbian-buster-lite.zip)
    country=EU
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    
    network={
        ssid="NETWORK-NAME"
        psk="NETWORK-PASSWORD"
    }
    

Bootstrap jbert

To install all needed software packages / drivers:

sam@guido:~/projects/git/jbert$ ssh-copy-id pi@$JBERT_IP
sam@guido:~/projects/git/jbert$ ./bootstrap.sh $JBERT_IP

Deploy jbert Application

Debian package build (gradle nebula plugin) and deploy is documented in this two scripts:

sam@guido:~/projects/git/jbert$ ssh-copy-id pi@$JBERT_IP
sam@guido:~/projects/git/jbert$ ./cleanBuild.sh && ./deploy.sh $JBERT_IP ./build/distributions/jbert-0.3.0.deb

Manage MPD Audio / Playlists

Connect using a MPD client (http://ario-player.sourceforge.net). Or copy audio files and playlists using scp or rsync.

sam@guido:~/projects/git/jbert$ rsync --chmod=664 --chown=mpd:audio -avh music playlists pi@$JBERT_IP:/var/lib/mpd/

Monitor Target JVM

Due to the fact that the Raspberry Pi Zero hardware is not the most powerful one it might be good to understand what is going on on the target JVM. This can be done using VisualVM.

How to connect using a SOCKS proxy is described here: https://dzone.com/articles/visualvm-monitoring-remote-jvm

jbert's People

Contributors

0xca5a avatar rake5k avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

rake5k

jbert's Issues

Application crash at first start

Application does not start the first time:

Sep 08 10:31:04 zero jbert[330]: Sep 08, 2019 10:31:04 AM com.google.inject.internal.util.Stopwatch resetAndLog
Sep 08 10:31:04 zero jbert[330]: FINE: Preloading singletons: 20797ms
Sep 08 10:31:04 zero jbert[330]: Oops, cannot start the server.
Sep 08 10:31:04 zero jbert[330]: com.google.inject.CreationException: Unable to create injector, see the following errors:
Sep 08 10:31:04 zero jbert[330]: 1) Error injecting constructor, java.lang.RuntimeException: Unable to open GPIO edge interface for pin 7: Permission denied
Sep 08 10:31:04 zero jbert[330]:   at event.EventRouterImpl.<init>(EventRouterImpl.java:25)
Sep 08 10:31:04 zero jbert[330]:   while locating event.EventRouterImpl
Sep 08 10:31:04 zero jbert[330]:   at modules.BackendModule.configure(BackendModule.java:25) (via modules: com.google.inject.util.Modules$OverrideModule -> modules.ApplicationModule -> modules.BackendModule)
Sep 08 10:31:04 zero jbert[330]:   while locating event.EventRouter
Sep 08 10:31:04 zero jbert[330]: 1 error
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:543)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:186)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.Guice.createInjector(Guice.java:87)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.Guice.createInjector(Guice.java:78)
Sep 08 10:31:04 zero jbert[330]:         at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:201)
Sep 08 10:31:04 zero jbert[330]:         at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:156)
Sep 08 10:31:04 zero jbert[330]:         at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:22)
Sep 08 10:31:04 zero jbert[330]:         at play.core.server.ProdServerStart$.start(ProdServerStart.scala:59)
Sep 08 10:31:04 zero jbert[330]:         at play.core.server.ProdServerStart$.main(ProdServerStart.scala:31)
Sep 08 10:31:04 zero jbert[330]:         at play.core.server.ProdServerStart.main(ProdServerStart.scala)
Sep 08 10:31:04 zero jbert[330]: Caused by: java.lang.RuntimeException: Unable to open GPIO edge interface for pin 7: Permission denied
Sep 08 10:31:04 zero jbert[330]:         at com.pi4j.wiringpi.GpioInterrupt.enablePinStateChangeCallback(Native Method)
Sep 08 10:31:04 zero jbert[330]:         at com.pi4j.io.gpio.WiringPiGpioProviderBase.updateInterruptListener(WiringPiGpioProviderBase.java:325)
Sep 08 10:31:04 zero jbert[330]:         at com.pi4j.io.gpio.WiringPiGpioProviderBase.addListener(WiringPiGpioProviderBase.java:300)
Sep 08 10:31:04 zero jbert[330]:         at com.pi4j.io.gpio.impl.GpioPinImpl.updateInterruptListener(GpioPinImpl.java:471)
Sep 08 10:31:04 zero jbert[330]:         at com.pi4j.io.gpio.impl.GpioPinImpl.addListener(GpioPinImpl.java:492)
Sep 08 10:31:04 zero jbert[330]:         at gpio.GpiListener.registerAction(GpiListener.java:29)
Sep 08 10:31:04 zero jbert[330]:         at gpio.GpioServiceImpl.registerGpiListener(GpioServiceImpl.java:16)
Sep 08 10:31:04 zero jbert[330]:         at event.EventRouterImpl.configureGpiListener(EventRouterImpl.java:43)
Sep 08 10:31:04 zero jbert[330]:         at event.EventRouterImpl.<init>(EventRouterImpl.java:30)
Sep 08 10:31:04 zero jbert[330]:         at event.EventRouterImpl$$FastClassByGuice$$4f3f8bcf.newInstance(<generated>)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:89)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:306)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:62)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:168)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:39)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:211)
Sep 08 10:31:04 zero jbert[330]:         at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:182)
Sep 08 10:31:04 zero jbert[330]:         ... 9 more
Sep 08 10:31:05 zero jbert[330]: Exception in thread "Thread-5" java.lang.RuntimeException: Unable to open GPIO direction interface for pin 23: Permission denied
Sep 08 10:31:05 zero jbert[330]:         at com.pi4j.wiringpi.GpioInterrupt.disablePinStateChangeCallback(Native Method)
Sep 08 10:31:05 zero jbert[330]:         at com.pi4j.io.gpio.WiringPiGpioProviderBase.updateInterruptListener(WiringPiGpioProviderBase.java:329)
Sep 08 10:31:05 zero jbert[330]:         at com.pi4j.io.gpio.WiringPiGpioProviderBase.removeListener(WiringPiGpioProviderBase.java:308)
Sep 08 10:31:05 zero jbert[330]:         at com.pi4j.io.gpio.GpioProviderBase.removeAllListeners(GpioProviderBase.java:342)
Sep 08 10:31:05 zero jbert[330]:         at com.pi4j.io.gpio.GpioProviderBase.shutdown(GpioProviderBase.java:378)
Sep 08 10:31:05 zero jbert[330]:         at com.pi4j.io.gpio.impl.GpioControllerImpl.shutdown(GpioControllerImpl.java:1051)
Sep 08 10:31:05 zero jbert[330]:         at com.pi4j.io.gpio.impl.GpioControllerImpl$ShutdownHook.run(GpioControllerImpl.java:986)
Sep 08 10:31:05 zero mpd[622]: client: [1] closed
Sep 08 10:31:05 zero systemd[1]: jbert.service: Main process exited, code=exited, status=255/EXCEPTION
Sep 08 10:31:05 zero systemd[1]: jbert.service: Failed with result 'exit-code'.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.