Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

среда, 9 апреля 2014 г.

Raspberry Pi - Ставим Linux/Java. Моргаем светодиодом

В прошлом посту я сделал обзор покупки и обещал, что будет продолжение.

Если тебе интересно, чем я тут занимаюсь - ты можешь помочь проекту. Все, чем ты поделишься пойдет на покупку новых запчастей с подробным описанием тут, в блоге всех экспериментов

Сегодня у нас в компании состоялся сходнячок на тему Raspberry Pi. Каждый показал свои наработки. Через часик ребята собрались и разбежались. Остались двое я и Артем. У Артема опыта с Raspberry Pi поболее будет, а потому он мне помог собрать все. Конечно же мой комп показывал свои какие-то приколы, но за 3 часа мы его убедили, что светодиодом моргать надо так, как хотим мы! Кто тут главный, а?!


Теперь все по-порядку. Хотелось бы, чтобы читатель хотел и мог это сделать за пол часа и сэкономил себе время. Потрачу еще час своего времени, начну с чистой флешки, чтобы все подробно-пре-подробно описать. Надеюсь пригодится. 

Итак у нас есть пустая флешка. Нам понадобится программа Win32DiskImager и образ Raspbian (взято тут). 

Запускать программу стоит из под Администратора, иначе ошибки будут.


Флешку берем чистую, закатаем на нее образ. 


После стоит подождать, пока не закончится запись... Это продлится минут 5 не больше. 



Дальше у нас есть несколько вариантов. Если у нас есть монитор, то мы можем подключиться к нему через HDMI и включить Raspberry Pi и увидеть на экране, как разворачивается Linux. 

Но представим, что у нас нет никакого HDMI кабеля и монитора (мы пользовались проектором, который потом перестал показывать картинку {наверное из за битого провода}).  

Будем подключаться специальным образом к консольке Linux. В этом нам поможет USB-кабель для TTL-консоли. Подключать его стоит аккуратно и вот так - крайний ряд, счет ведем от угла, 3, 4, 5 пины - черный, белый и зеленый соответственно.


Подключаем к usb, вставляем флешку, включаем питание (через microUSB) RaspberryPi (красная лампочка должна гореть).


На компе (Windows) нужно установить драйвер от Prolific. После его установки он появится в диспетчере устройств. Тут надо обратить внимание под видом какого порта он появился.


Потом понадобится нам Putty чтобы подключиться. Выбираем Serial, указываем порт COMn, где n - номер из диспетчера устройств, скорость - 115200.


После подключения мы должны увидеть консоль. Но это не мой путь, поскольку Windows8 не скушала драйвер от Prolific, и я не смог подключиться через него. Печалька. Надеюсь у тебя получится.

Я сделал то же на компе с Windows7 - все установилось без проблем и в консоли увидел вот что.

Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.25+ (dc4@dc4-arm-01) (gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08) ) #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014
[    0.000000] CPU: ARMv6-compatible processor [410fb767] revision 7 (ARMv7), cr=00c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
[    0.000000] Machine: BCM2708
[    0.000000] cma: CMA: reserved 16 MiB at 1b000000
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 113792
[    0.000000] Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=656 bcm2708_fb.fbheight=416 bcm2708.boardrev=0xe bcm2708.serial=0xe27dc0f5 smsc95xx.macaddr=B8:27:EB:7D:C0:F5 sdhci-bcm2708.emmc_clock_freq=250000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 448MB = 448MB total
[    0.000000] Memory: 431652k/431652k available, 27100k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xdc800000 - 0xff000000   ( 552 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xdc000000   ( 448 MB)
[    0.000000]     modules : 0xbf000000 - 0xc0000000   (  16 MB)
[    0.000000]       .text : 0xc0008000 - 0xc05727b4   (5546 kB)
[    0.000000]       .init : 0xc0573000 - 0xc0597424   ( 146 kB)
[    0.000000]       .data : 0xc0598000 - 0xc05d0870   ( 227 kB)
[    0.000000]        .bss : 0xc05d0870 - 0xc067c3e0   ( 687 kB)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000] NR_IRQS:330
[    0.000000] sched_clock: 32 bits at 1000kHz, resolution 1000ns, wraps every 4294967ms
[    0.000000] Switching to timer-based delay loop
[    0.000000] Console: colour dummy device 80x30
[    0.000000] console [tty1] enabled
[    0.001183] Calibrating delay loop (skipped), value calculated using timer frequency.. 2.00 BogoMIPS (lpj=10000)
[    0.001250] pid_max: default: 32768 minimum: 301
[    0.001722] Mount-cache hash table entries: 512
[    0.002538] Initializing cgroup subsys memory
[    0.002647] Initializing cgroup subsys devices
[    0.002689] Initializing cgroup subsys freezer
[    0.002725] Initializing cgroup subsys blkio
[    0.002886] CPU: Testing write buffer coherency: ok
[    0.003366] Setting up static identity map for 0xc0406048 - 0xc04060a4
[    0.005199] devtmpfs: initialized
[    0.019623] NET: Registered protocol family 16
[    0.025603] DMA: preallocated 4096 KiB pool for atomic coherent allocations
[    0.026724] bcm2708.uart_clock = 0
[    0.028455] hw-breakpoint: found 6 breakpoint and 1 watchpoint registers.
[    0.028511] hw-breakpoint: maximum watchpoint size is 4 bytes.
[    0.028551] mailbox: Broadcom VideoCore Mailbox driver
[    0.028650] bcm2708_vcio: mailbox at f200b880
[    0.028756] bcm_power: Broadcom power driver
[    0.028797] bcm_power_open() -> 0
[    0.028826] bcm_power_request(0, 8)
[    0.529548] bcm_mailbox_read -> 00000080, 0
[    0.529592] bcm_power_request -> 0
[    0.529818] Serial: AMBA PL011 UART driver
[    0.529983] dev:f1: ttyAMA0 at MMIO 0x20201000 (irq = 83) is a PL011 rev3
[    0.872118] console [ttyAMA0] enabled
[    0.898069] bio: create slab  at 0
[    0.903403] SCSI subsystem initialized
[    0.907381] usbcore: registered new interface driver usbfs
[    0.913102] usbcore: registered new interface driver hub
[    0.918680] usbcore: registered new device driver usb
[    0.925274] Switching to clocksource stc
[    0.929621] FS-Cache: Loaded
[    0.932793] CacheFiles: Loaded
[    0.948598] NET: Registered protocol family 2
[    0.954022] TCP established hash table entries: 4096 (order: 3, 32768 bytes)
[    0.961293] TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
[    0.967819] TCP: Hash tables configured (established 4096 bind 4096)
[    0.974292] TCP: reno registered
[    0.977552] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.983462] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.990204] NET: Registered protocol family 1
[    0.995140] RPC: Registered named UNIX socket transport module.
[    1.001206] RPC: Registered udp transport module.
[    1.005932] RPC: Registered tcp transport module.
[    1.010682] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.018034] bcm2708_dma: DMA manager at f2007000
[    1.022856] bcm2708_gpio: bcm2708_gpio_probe c05a5e50
[    1.028312] vc-mem: phys_addr:0x00000000 mem_base=0x1ec00000 mem_size:0x20000000(512 MiB)
[    1.037698] audit: initializing netlink socket (disabled)
[    1.043376] type=2000 audit(0.890:1): initialize[    1.205646] VFS: Disk quotas dquot_6.5.2
[    1.210045] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    1.218891] FS-Cache: Netfs 'nfs' registered for caching
[    1.225629] NFS: Registering the id_resolver key type
[    1.230933] Key type id_resolver registered
[    1.235146] Key type id_legacy registered
[    1.239950] msgmni has been set to 875
[    1.245824] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
[    1.253679] io scheduler noop registered
[    1.257642] io scheduler deadline registered (default)
[    1.263238] io scheduler cfq registered
[    1.267382] bcm2708_fb_debugfs_init: could not create debugfs entry
[    1.274966] BCM2708FB: allocated DMA memory 5b400000
[    1.280124] BCM2708FB: allocated DMA channel 0 @ f2007000
[    1.291686] Console: switching to colour frame buffer device 82x26
[    1.301884] uart-pl011 dev:f1: no DMA platform data
[    1.308225] kgdb: Registered I/O driver kgdboc.
[    1.314879] vc-cma: Videocore CMA driver
[    1.320248] vc-cma: vc_cma_base      = 0x00000000
[    1.326259] vc-cma: vc_cma_size      = 0x00000000 (0 MiB)
[    1.333023] vc-cma: vc_cma_initial   = 0x00000000 (0 MiB)
[    1.348942] brd: module loaded
[    1.358592] loop: module loaded
[    1.363377] vchiq: vchiq_init_state: slot_zero = 0xdb000000, is_master = 0
[    1.372525] Loading iSCSI transport class v2.0-870.
[    1.379986] usbcore: registered new interface driver smsc95xx
[    1.387574] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[    1.594889] Core Release: 2.80a
[    1.599394] Setting default values for core params
[    1.605442] Finished setting default values for core params
[    1.812346] Using Buffer DMA mode
[    1.816942] Periodic Transfer Interrupt Enhancement - disabled
[    1.824071] Multiprocessor Interrupt Enhancement - disabled
[    1.830930] OTG VER PARAM: 0, OTG VER FLAG: 0
[    1.836563] Dedicated Tx FIFOs mode
[    1.842120] dwc_otg bcm2708_usb: DWC OTG Controller
[    1.848348] dwc_otg bcm2708_usb: new USB bus registered, assigned bus number 1
[    1.856973] dwc_otg bcm2708_usb: irq 32, io mem 0x00000000
[    1.863801] Init: Port Power? op_state=1
[    1.869000] Init: Power Port (0)
[    1.873652] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    1.881937] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    1.890589] usb usb1: Product: DWC OTG Controller
[    1.896672] usb usb1: Manufacturer: Linux 3.10.25+ dwc_otg_hcd
[    1.903902] usb usb1: SerialNumber: bcm2708_usb
[    1.910587] hub 1-0:1.0: USB hub found
[    1.915727] hub 1-0:1.0: 1 port detected
[    1.921854] usbcore: registered new interface driver usb-storage
[    1.929673] mousedev: PS/2 mouse device common for all mice
[    1.937208] bcm2835-cpufreq: min=700000 max=700000 cur=700000
[    1.944519] bcm2835-cpufreq: switching to governor powersave
[    1.951579] bcm2835-cpufreq: switching to governor powersave
[    1.958497] cpuidle: using governor ladder
[    1.963844] cpuidle: using governor menu
[    1.969013] sdhci: Secure Digital Host Controller Interface driver
[    1.976473] sdhci: Copyright(c) Pierre Ossman
[    1.982151] sdhci: Enable low-latency mode
[    2.029306] mmc0: SDHCI controller on BCM2708_Arasan [platform] using platform's DMA
[    2.039794] mmc0: BCM2708 SDHC host at 0x20300000 DMA 2 IRQ 77
[    2.047028] sdhci-pltfm: SDHCI platform and OF driver helper
[    2.054171] ledtrig-cpu: registered to indicate activity on CPUs
[    2.063758] hidraw: raw HID events driver (C) Jiri Kosina
[    2.078060] usbcore: registered new interface driver usbhid
[    2.085157] usbhid: USB HID core driver
[    2.095003] TCP: cubic registered
[    2.101764] Initializing XFRM netlink socket
[    2.109488] NET: Registered protocol family 17
[    2.115469] Key type dns_resolver registered
[    2.124430] Indeed it is in host mode hprt0 = 00021501
[    2.131412] VFP support v0.3: implementor 41 architecture 1 part 20 variant b rev 5
[    2.160089] registered taskstats version 1
[    2.169691] drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
[    2.189668] Waiting for root device /dev/mmcblk0p2...
[    2.271484] mmc0: read SD Status register (SSR) after 6 attempts
[    2.283986] mmc0: new high speed SDHC card at address b368
[    2.291625] mmcblk0: mmc0:b368 NCard 14.8 GiB
[    2.299705]  mmcblk0: p1 p2
[    2.379334] usb 1-1: new high-speed USB device number 2 using dwc_otg
[    2.387425] Indeed it is in host mode hprt0 = 00001101
[    2.590113] usb 1-1: New USB device found, idVendor=0424, idProduct=9514
[    2.598383] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    2.607916] hub 1-1:1.0: USB hub found
[    2.613493] hub 1-1:1.0: 5 ports detected
[    2.899484] usb 1-1.1: new high-speed USB device number 3 using dwc_otg
[    3.020030] usb 1-1.1: New USB device found, idVendor=0424, idProduct=ec00
[    3.028431] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    3.040281] smsc95xx v1.0.4
[    3.107861] smsc95xx 1-1.1:1.0 eth0: register 'smsc95xx' at usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet, b8:27:eb:7d:c0:f5
[    6.593574] EXT4-fs (mmcblk0p2): recovery complete
[    6.703930] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    6.715143] VFS: Mounted root (ext4 filesystem) on device 179:2.
[    6.724829] devtmpfs: mounted
[    6.729895] Freeing unused kernel memory: 144K (c0573000 - c0597000)
[    8.404766] udevd[156]: starting version 175
[   10.551303] bcm2708-i2s bcm2708-i2s.0: Failed to create debugfs directory
[   16.829010] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[   17.336842] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[   23.153129] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
 
Raspbian GNU/Linux 7 raspberrypi ttyAMA0

raspberrypi login:

Но я ничего не смог набрать с клавиатуры - консоль зависала. В попытке решить этот вопрос я случайно поломал USB-кабель для TTL-консоли он как-то очень сильно оттопырено торчал из ноута, а я был очень неаккуратным. Так что будь внимательнее с торчащими из ноута дивайсами...

Что делать? HDMI провода нет. Но у Raspberry Pi есть еще один видеовыход - простой желтенький тюльпанчик. За него-то я и подключился к проектору. 




Поклеил на шкаф детским пластелином ватман и получил картинку! Более приятную, чем в консоли Putty - с малинкой


После минутки распаковки я увидел установочное меню.


Если ты вдруг не увидел такого меню, а у меня загрузилась GUI - не переживай. Ты можешь найти эти свойства в настройках PaspberryPi в меню "Пуск" либо выполнив в консоли sudo raspi-config

Итак в программе настройки стоит выбрать первый пункт меню 1. Expand filesystem - я так понимаю, чтобы вся моя флешка была использована под раздел. 

Ах да! Клавиатура нужна тоже :) Ее можно воткнуть в любой USB порт.


Клава тут же заработала. И я выбрал все таки первый пункт меню.



Говорит после перегрузки все сделает, оки, верю!

Идем дальше по меню - зайдем в Advanced


Так, как я поломал USB-кабель для TTL-консоли, то надобно включать другой способ доступа к Raspberry Pi - а именно по сетке через SSH. Включим его тут.




Так же включим SPI - понадобится позже.




Можно так же подглядеть и другие пункты меню, например способ загрузки Linux.



Вообще эта конфигурационная тула может быть запущена из консоли в любое время с помощью команды sudo raspi-config



Если в основном меню нажать Esc то выйдешь в консоль Linux


Для выключение Paspberry Pi достаточно выполнить команду sudo halt и подождать завершения. Выключать питание при включенной Linux не стоит (хотя можно на свой страх и риск) - говорят от этого порой флешка страдает так, что ее нельзя потом использовать для этих целей - только как попсовую флешку.  


Так, после остановки системы можно выключить питание и включить обратно. Так бы хотелось иметь на платке кнопку ресет, а то уже предвкушаю отломанный microUSB и чтобы этого не случилось, лучше отключать USB провод от блока питания а не от Raspberry Pi. 

Итак мы включились. Вышли из меню. Видим командную строку. Сейчас нам надо настроить сетку. Для этого в консоли пишем команду sudo nano /etc/network/interfaces

Мы увидим содержимое конфиг файла


Нам надо строчку iface eth0 inet dhcp заменить на вот эти строки (взято тут)
auto eth0
iface eth0 inet static
    address 192.168.1.111
    netmask 255.255.255.0
    gateway 192.168.1.1
    # network 192.168.1.0
    # broadcast 192.168.1.255


Далее жмакаем Ctrl-X , Y, Enter  - файл сохранится

Далее выполняем команду sudo service networking restart

После этого можно проверить командой ifconfig изменения

Теперь можно подключать Ethernet провод к рабочему компу. После подключения в настройках сетевых устройств



В свойствах Ethernet контроллера


Прописываем в Ipv4


192.168.1.100
255.255.255.0


При этом у меня начались глюки с инетом, и я его от греха подальше вообще отключил, а Ethernet включил



Raspberry Pi сразу зажег свой желтый светодиод....


Супер! Осталось совсем не много! :)

Кстати, если немного отвлечься, и выделить в настройках сетевых адаптеров wireless (через который у тебя инет ловится) и ethernet (что кабелем к малинке подключен) и настроить мост, то на малинке появится инет  


После удаления моста все вернется восвояси.


Но нам надо подключиться к Raspberry Pi через SSH. Для этого нам поможет либо уже привычная Putty. Подключаемся через SSH (22 порт) к 192.168.1.111 (если что не получается - отключаем/включаем Ethernet). Логин/пароль - pi/raspberry




И опля! Мы в консоли!


Теперь надобно установить java. Делаем это командой sudo apt-get install oracle-java7-jdk устанавливаем java. После можно попробовать командой java -version получить версию java.  


Теперь нам понадобится чудная программка. MobaXTerm, с ее помощью можно так же работать с консолькой, только еще и файлы заливать на Raspberry Pi.


Создадим тут (/home/pi/) папочку java и на время переключимся на написание проектика

Создадим пустой java maven проект и исправим его pom.xml


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>jpio</groupId>
    <artifactId>jpio</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.pi4j</groupId>
            <artifactId>pi4j-core</artifactId>
            <version>1.2-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <groupId>com.pi4j</groupId>
                    <artifactId>pi4j-native</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>oss-snapshots-repo</id>
            <name>Sonatype OSS Maven Repository</name>
            <url>https://oss.sonatype.org/content/groups/public</url>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
            </snapshots>
        </repository>
    </repositories>

    <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>

                    <archive>
                        <manifest>
                            <mainClass>com.apofig.raspberry.demo.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <finalName>jpio</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

Так же добавим класс

package com.apofig.raspberry.demo;

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class Main {

    public static final int LONG = 800;
    public static final int SHORT = 300;

    public static void main(String[] args) throws InterruptedException {

        System.out.println("Hello world !!!");

        GpioController gpio = GpioFactory.getInstance();
        GpioPinDigitalOutput pin = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "MyLED", PinState.HIGH);

        pin.high();
        Thread.sleep(SHORT);
        pin.low();
        Thread.sleep(SHORT);

        pin.high();
        Thread.sleep(SHORT);
        pin.low();
        Thread.sleep(SHORT);

        pin.high();
        Thread.sleep(SHORT);
        pin.low();
        Thread.sleep(LONG);

        pin.high();
        Thread.sleep(LONG);
        pin.low();
        Thread.sleep(LONG);

        pin.high();
        Thread.sleep(LONG);
        pin.low();
        Thread.sleep(LONG);

        pin.high();
        Thread.sleep(LONG);
        pin.low();
        Thread.sleep(LONG);

        pin.high();
        Thread.sleep(SHORT);
        pin.low();
        Thread.sleep(SHORT);

        pin.high();
        Thread.sleep(SHORT);
        pin.low();
        Thread.sleep(SHORT);

        pin.high();
        Thread.sleep(SHORT);
        pin.low();
        Thread.sleep(SHORT);

        gpio.shutdown();
    }
}

Билдим проект командой mvn package



А потом файлик jpio.jar в папке target переписываем на Raspberry Pi


Запустить на выполнение можем командой sudo java -jar java/jpio.jar


При этом светодиод замаргает, если мы его подключим. Как? Вот как, обязательно последовательно через сопротивление (резистор)


Тут для удобства я красненьким нарисовал как в монтажке внутри проходят проводники, а желтым показал нашу цепь. Синий - GND (Земля), Красный - #18 нога. С нумерацией ног тут туго, она не совсем соответсвует нумерации ног в коде, так что надо быть осторожным и перед тем как что-то к чему-то подключать сперва попробовать мультиметром.

Шлейф уходит к плану Rospberry Pi - там тоже важно не ошибиться с ключем.


Если все будет ок, то светодиод заморгает ...---...  и напишет в консоли Hello world!!!

Но если в консоли написало ощибку
Unable to determine hardware version. I see: Hardware   : BCM2835  - expecting BCM2708 or BCM2709.


Я нашел пост с решениями, но реально помогло после таких действий/
1) обновление операционки (я не уверен что оно надо было, но все же накатил)
sudo apt-get update
sudo apt-get dist-upgrade

2) обновление в pom.xml версии pi4j-core до 1.2-SNAPSHOT с последующей пересборкой mvn clean package и заливкой на сервер в ~/java

Пока все.

Если тебе понравился этот пост. Ты можешь помочь проекту. Все, Чем ты поделишься пойдет на покупку новых запчастей с подробным описанием тут, в блоге хода экспериментов.

Спасибо за твой интерес!

Продолжение как всегда следует....

4 комментария:

  1. Интересная штука, большие возможности =)
    Благодарю за публикацию!

    ОтветитьУдалить
    Ответы
    1. Спасибо за комментарий!
      И спасибо за ваш блог!

      Удалить
  2. Такое понятие как "под катом" Вам не знакомо? Плюс ко всему 1000+ постов, а постраничной навигации приделать видимо тоже времени нет?

    ОтветитьУдалить
    Ответы
    1. Спасибо. Фичей "под катом" пользовался. Видимо стоит вернуть. Чем-то она не понравилась.
      А что такое "постраничная навигация"? Гляну есть ли она в блогспоте.
      Прошу, воспринимайте этот блог как свалку, где можно найти что-нибудь полезное. Куда более важен ваш опыт!
      Какие еще идеи по улучшению вы предлагаете?
      Спасибо!

      Удалить