Showing posts with label Coding. Show all posts
Showing posts with label Coding. Show all posts

Monday, 6 September 2021

openOCD Debug STM32

If working remotely, everything is terminal. No GUI like stm32cubeide to use for firmware debugging. I need to use openOCD now. I am using a stm32f407 discovery board for the following tests.

1. install openOCD
sudo apt-get install openocd
cd /usr/local/share 
sudo ln -s /usr/share/openocd .

2. install toolchain
sudo apt install gcc-arm-none-eabi

3. install stm32cubeMX
Generate a project with makefile.

4. go the project directory and make the project.

5. make a cfg file

cd /usr/local/share/openocd/scripts/board

boris@boris-T420:/usr/local/share/openocd/scripts/board$ sudo cp stm32f4discovery.cfg stm32f407discovery_boris.cfg

6. Terminal 1: launch openOCD to connect to the board

openocd -f /usr/local/share/openocd/scripts/board/stm32f407discovery_boris.cfg

You can see the following problem:


7. edit the cfg file


Now it works:


8. Terminal 2: start GDB

go to the project directory, go to build/

PATH/TO/PROJECT/build$ arm-none-eabi-gdb openocd_practice.elf



9. now in gdb teminal, start debuging:
ref:
https://www.youtube.com/watch?v=yDNbpXjWAuU&ab_channel=AimalKhan



ref:

https://www.youtube.com/watch?v=yDNbpXjWAuU&ab_channel=AimalKhan
https://www.youtube.com/watch?v=Df7gtGyQaxg&t=512s&ab_channel=EmbeddedTips
http://forum.chibios.org/viewtopic.php?t=3425
https://elinux.org/OpenOCD_Ubuntu_Package

Friday, 3 September 2021

First Time Setting New MT7688 Module

 Got a new module, how to set network easily?

1. Connect your PC to the WAN port.

2. Serial connect to the board:

$ screen /dev/ttyUSB0 57600

$ ifconfig

br-lan Link encap:Ethernet HWaddr 1C:88:79:56:43:0F
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fd40:27d8:7c5f::1/60 Scope:Global
inet6 addr: fe80::1e88:79ff:fe56:430f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1333 errors:0 dropped:0 overruns:0 frame:0
TX packets:1284 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:92554 (90.3 KiB) TX bytes:106278 (103.7 KiB)

3. Go back to PC and open a browser, put down 192.168.1.1

Default password is root.



Saturday, 9 January 2021

ROS Tinkering - 01: 'package_name' is not a package

PROBLEM:

My source code structure is: ./my_project/app_ws/src/abc/abc.py and abc.py is node abc's entry python module.

My CMakelists.txt says:
    project(abc)

My package.xml says:
   <name>abc</name>

$ rosrun abc abc.py 

Traceback (most recent call last):
   File "/home/xxx/workspace/my_project/install/abc/lib/abc/abc.py", line 35, in <module>
    from abc.srv import LoadExperiment, LoadExperimentResponse

File "/home/xxx/workspace/my_project/install/abc/lib/abc/abc.py", line 35, in <module>
    from abc.srv import LoadExperiment, LoadExperimentResponse
ModuleNotFoundError: No module named 'abc.srv'; 'abc' is not a package


Solution:

ROS cannot handle the same name abc as the package name and same as the entry python module file. So just change the entry python module's name to abc_node.py or something else.



Saturday, 3 October 2020

Docker Tinkering: Troubleshoot Is the docker daemon running? Problem

 Got this error:

$ sudo docker build -t name:version .

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

ERRO[0000] failed to dial gRPC: cannot connect to the Docker daemon. Is 'docker daemon' running on this host?: dial unix /var/run/docker.sock: connect: connection refused 

Also problem can be seen down below:

$ sudo service docker status

● docker.service

   Loaded: masked (/dev/null; bad)

   Active: inactive (dead) since Fri 2020-10-02 13:34:41 EDT; 1 day 7h ago

 Main PID: 32072 (code=exited, status=0/SUCCESS)


Solution:

$ sudo systemctl unmask docker

Removed /etc/systemd/system/docker.service.

$ sudo systemctl start docker

$ sudo service docker status

● docker.service - Docker Application Container Engine

   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: e

   Active: active (running) since Sat 2020-10-03 21:28:48 EDT; 3s ago

     Docs: https://docs.docker.com

 Main PID: 11763 (dockerd)

    Tasks: 16

   CGroup: /system.slice/docker.service

           └─11763 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/contai


ref:

https://stackoverflow.com/questions/44678725/cannot-connect-to-the-docker-daemon-at-unix-var-run-docker-sock-is-the-docker

Tuesday, 1 September 2020

Tinkering OpenWRT (20) : Flash Compiled Image

Step 1: 

After compiling, the bin file should be located in :
openwrt/bin/ramips/openwrt-ramips-mt7620-XXXXX-squashfs-sysupgrade.bin

Step 2:

Copy the bin file to board 
scp openwrt-ramips-mt7620-XXXXX-squashfs-sysupgrade.bin root@192.168.1.1:/tmp

Step 3:
Login board, ether via UART or Ethernet

Step 4:
cd /tmp
# make sure the file transfer is completed 
md5sum openwrt-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin 
mtd -r write openwrt-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin firmware

Wait for it to finish...

Friday, 24 July 2020

To convert a bare repo to a normal one


To convert a bare repo to a normal one:
$ git clone -l <path_to_bare_repo> <new_normal_repo>

Friday, 3 July 2020

Tinkering OpenWRT (19) : HiLink 7866A Serial Login

I don't want to figure this out again, so here it is:

- Use COM0
- screen /dev/ttyUSB0 57600

Saturday, 22 February 2020

Android Studio ERROR: SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

I was trying to import a project and I got the following error when building gradle:

ERROR: SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.

Solution:
- Find the file local.properties in ./app folder where gradle files like build and build.gradle live.
- Copy your local.properties file to the folder to the root folder where the project is stored.

ref:
https://stackoverflow.com/questions/27620262/sdk-location-not-found-define-location-with-sdk-dir-in-the-local-properties-fil

Tuesday, 19 November 2019

openCV Troubleshooting (2) : error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope


This is due to different versions of openCV. Things got update to different names.

Didn't work:
image1=  cv::imread("test.bmp", CV_LOAD_IMAGE_GRAYSCALE);

Didn't work:
image1=  cv::imread("test.bmp", IMREAD_GRAYSCALE);

WORKED!!!!!
image1=  cv::imread("test.bmp", cv::ImreadModes::IMREAD_GRAYSCALE);


ref:
https://stackoverflow.com/questions/27424285/cv-load-image-grayscale-is-not-definedpy
https://stackoverflow.com/questions/22547416/open-cv-flags-dont-work

openCV Troubleshooting (1) : undefined reference to `cv::xxxx`


I am compiling openCV project with cmake and I am getting errors like:

test.cpp:(.text+0xc0): undefined reference to `cv::imread(std::string const&, int)'
test.cpp:(.text+0x11f): undefined reference to `cv::_OutputArray::_OutputArray(cv::Mat&)'
test.cpp:(.text+0x138): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'
test.cpp:(.text+0x158): undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)'
test.cpp:(.text+0x180): undefined reference to `cv::_InputArray::_InputArray(cv::Mat const&)'

The following compiling script won't cause the issue.
g++ -o test_1 test_1.cpp `pkg-config opencv --cflags --libs`

But to fix cmake compile, we need to add the following red line to CMakeList.txt.

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )


ref:

Tuesday, 13 August 2019

Tinkering OpenWRT (18) : Toubleshooting MT7688AN Hardware




Problem (1) : Serial to TTL not working
     - Try use a laptop instead of a desktop. There might be compatibility issue between the motherboard and USB. Or just not enough power from USB on a desktop.
     - Try use a higher input than 3v3. Even 5v works.

ref:
https://blog.csdn.net/u012175418/article/details/52572672





Sunday, 14 July 2019

openCV Troubleshooting (0): error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

Trying to compile some example code (in Python) from the internet and got the following error:

Traceback (most recent call last):
  File "main.py", line 16, in <module>
    img = drawFaces(img)
  File "/home/boris/facedetect_example/example2/OpenCV-demo-master/Video-FaceDetection/face_detection.py", line 26, in drawFaces
    faces = detectFaces(img)
  File "/home/boris/facedetect_example/example2/OpenCV-demo-master/Video-FaceDetection/face_detection.py", line 18, in detectFaces
    faces = face_cascade.detectMultiScale(gray, 1.2, 5)
cv2.error: OpenCV(4.1.0) /home/boris/workspace/opencv-4.1.0/modules/objdetect/src/cascadedetect.cpp:1658: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

It turns out the cascade XML or file is missing or the path to it is incorrect or the create_capture path is incorrect. Of course, this is someone else's code.

Updated this line:
face_cascade = cv2.CascadeClassifier("/home/aaaaa/OpenCV-demo/opencv-data/haarcascades/haarcascade_frontalface_default.xml")

To 
face_cascade = cv2.CascadeClassifier("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml")

Everything works now.


ref:
https://stackoverflow.com/questions/30508922/error-215-empty-in-function-detectmultiscale

Tuesday, 1 January 2019

Troubleshooting when Setting up Github Page

At the step of setting up Ruby locally for testing, I got this:

Fetching gem metadata from https://rubygems.org/..............
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies.....
Fetching concurrent-ruby 1.1.4
Installing concurrent-ruby 1.1.4
Fetching i18n 0.9.5
Installing i18n 0.9.5
Fetching minitest 5.11.3
Installing minitest 5.11.3
Fetching thread_safe 0.3.6
Installing thread_safe 0.3.6
Fetching tzinfo 1.2.5
Installing tzinfo 1.2.5
Fetching activesupport 4.2.10
Installing activesupport 4.2.10
Fetching public_suffix 2.0.5
Installing public_suffix 2.0.5
Fetching addressable 2.5.2
Installing addressable 2.5.2
Using bundler 1.17.3
Fetching coffee-script-source 1.11.1
Installing coffee-script-source 1.11.1
Fetching execjs 2.7.0
Installing execjs 2.7.0
Fetching coffee-script 2.4.1
Installing coffee-script 2.4.1
Fetching colorator 1.1.0
Installing colorator 1.1.0
Fetching ruby-enum 0.7.2
Installing ruby-enum 0.7.2
Fetching commonmarker 0.17.13
Installing commonmarker 0.17.13 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
/home/boris/workspace/my_Github_Website/codemonkeyboris.github.io/vendor/bundle/ruby/2.5.0/gems/commonmarker-0.17.13/ext/commonmarker
/usr/bin/ruby2.5 -r ./siteconf20181231-18337-kelz2o.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in
/home/boris/workspace/my_Github_Website/codemonkeyboris.github.io/vendor/bundle/ruby/2.5.0/gems/commonmarker-0.17.13 for inspection.
Results logged to
/home/boris/workspace/my_Github_Website/codemonkeyboris.github.io/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/commonmarker-0.17.13/gem_make.out

An error occurred while installing commonmarker (0.17.13), and Bundler cannot continue.
Make sure that `gem install commonmarker -v '0.17.13' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  github-pages was resolved to 193, which depends on
    jekyll-commonmark-ghpages was resolved to 0.1.5, which depends on
      jekyll-commonmark was resolved to 1.2.0, which depends on
        commonmarker

#####################################################

Solution:

$sudo apt-get install ruby-all-dev
$bundle install --path vendor/bundle


ref:
https://help.github.com/articles/setting-up-your-github-pages-site-locally-with-jekyll/
https://github.com/github/pages-gem/issues/133



Wednesday, 26 December 2018

Tinkering OpenWRT (17) : trouble shooting (build source code) target 'world' failed problem

I am trying to compile openwrt and got the following error:

include/toplevel.mk:216: recipe for target 'world' failed

I tried using 15.05 and checked out 18.06 (yes the head master is not newest 18.06) and I got the similar problem. Only the line number is sometimes different. After googling a loooooot, I found the simple solution.

$ make distclean
$ make clean

maybe also make defconfig

And $ make V=99

After over night...I found the image in bin/targets.


ref:
https://www.right.com.cn/forum/thread-186603-1-1.html
https://www.gargoyle-router.com/phpbb/viewtopic.php?t=8011&start=10

Tuesday, 25 December 2018

Tinkering OpenWRT (16) : openwrt Chaos Calmer Build dependency: Please install Git (git-core) >= 1.6.5


For some reason, I'd like to build my openwrt from 15.05 Chaos Calmer. But I ran into the following problem:

~/workspace/chaos_calmer$ make menuconfig 
Checking 'working-make'... ok.
Checking 'case-sensitive-fs'... ok.
Checking 'gcc'... ok.
Checking 'working-gcc'... ok.
Checking 'g++'... ok.
Checking 'working-g++'... ok.
Checking 'ncurses'... ok.
Checking 'zlib'... ok.
Checking 'libssl'... ok.
Checking 'tar'... ok.
Checking 'find'... ok.
Checking 'bash'... ok.
Checking 'patch'... ok.
Checking 'diff'... ok.
Checking 'cp'... ok.
Checking 'seq'... ok.
Checking 'awk'... ok.
Checking 'grep'... ok.
Checking 'getopt'... ok.
Checking 'stat'... ok.
Checking 'md5sum'... ok.
Checking 'unzip'... ok.
Checking 'bzip2'... ok.
Checking 'wget'... ok.
Checking 'perl'... ok.
Checking 'python'... ok.
Checking 'svn'... ok.
Checking 'git'... failed.
Checking 'file'... ok.
Checking 'openssl'... ok.
Checking 'ldconfig-stub'... ok.

Build dependency: Please install Git (git-core) >= 1.6.5

/home/boris/workspace/openWRT_build/openwrt_RPi/chaos_calmer/include/prereq.mk:12: recipe for target 'prereq' failed
Prerequisite check failed. Use FORCE=1 to override.
/home/boris/workspace/openWRT_build/openwrt_RPi/chaos_calmer/include/toplevel.mk:140: recipe for target 'staging_dir/host/.prereq-build' failed
make: *** [staging_dir/host/.prereq-build] Error 1

##########################################################################

Solution:

Step 1: Download the patch from here:
https://gitlab.labs.nic.cz/turris/openwrt/uploads/0673001b14ab1d1769604ff0ce7d8781/git-version-check-fix.patch

Step 2: put the patch file under the chaos calmer source code

Step 3: patch it
git apply git-version-check-fix.patch


ref:
https://forum.openwrt.org/t/solved-how-to-compile-15-05-release-build-dependency-please-install-git-git-core-1-6-5-message/11623/3
https://gitlab.labs.nic.cz/turris/openwrt/issues/56
https://github.com/spack/spack/issues/5329

Tuesday, 27 November 2018

Tinkering GStreamer (0) : See myself from PC Camera


$ gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! ximagesink
Looks pretty clear: source is /dev/video0

ref:
https://github.com/umlaeute/v4l2loopback/issues/174
https://stackoverflow.com/questions/23354041/gstreamer-video-stream-error-and-breaks-dev-video-source

Thursday, 15 November 2018

vagrant up issue

Ran in to problem when running:
$vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'hashicorp/precise64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise64' is up to date...
==> default: Setting the name of the VM: aws_default_1449506528859_
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Specific bridge 'en0' not found. You may be asked to s
==> default: which network to bridge to.
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: bridged
==> default: Forwarding ports...
default: 22 => 2200 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minut
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'starting, running'. The machine is in th
'poweroff' state. Please verify everything is configured
properly and try again.
If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve
For example, if you're using VirtualBox, run vagrant up while the
VirtualBox GUI is open.
The primary issue for this error is that the provider you're using
is not properly configured. This is very rarely a Vagrant issue.
#######################################################
You simply need to turn on the virtualization setting in your BIOS.



Friday, 5 October 2018

Tinkering OpenWRT (15) : Use I2C Bus



Step 1: Do as the official document says

# opkg update 
# opkg install kmod-i2c-gpio-custom kmod-i2c-core 
# insmod i2c-dev 
# insmod i2c-gpio-custom bus0=0,26,12 
# dmesg | grep gpio 
Mar 23 09:01:23 openwrt kern.info kernel: [ 52.910000] Custom GPIO-based I2C driver version 0.1.1 
Mar 23 09:01:23 openwrt kern.info kernel: [ 52.910000] i2c-gpio i2c-gpio.0: using pins 26 (SDA) and 12 (SCL)
Im using my AR9331 board, and Im using GPIO 26 and 12 as my SDA and SCL repectively.
And then what? The official doc just stops here?

Step 2 : Wiring

AR9331        Slave
SDA              SDA
SCL               SCL
GND             GND       <= this is very important

Step 3 : install i2c-tools

# opkg update && opkg install i2c-tools

Step 3 : install i2c-tools
# i2cdetect 0 

WARNING! This program can confuse your I2C bus, cause data loss and worse! 
I will probe file /dev/i2c-0. 
I will probe address range 0x03-0x77. Continue? [Y/n] y
       0 1 2 3 4 5 6 7 8 9 a b c d e f 
00: -- -- -- -- -- -- -- -- 08 -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- 
48 -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 

try this...
# i2cget 0 0x48 0 w




ref:
https://wiki.openwrt.org/doc/hardware/port.i2c
https://www.cnblogs.com/fastwave2004/articles/4250604.html     !!!!
http://linux-adm5120.sourceforge.net/openwrt/i2c/

Friday, 14 September 2018

Tinkering OpenWRT (14) : Python MQTT Setup





root@JoySince:~# mosquitto_sub  -t "topic" -v
topic OFF


####################################

Could download directly from openwrt:

root@JoySince:/tmp# wget --no-check-certificate https://pypi.python.org/packages
/source/p/paho-mqtt/paho-mqtt-1.1.tar.gz
wget: not an http or ftp url: https://pypi.python.org/packages/source/p/paho-mqtt/paho-mqtt-1.1.tar.gz

Download to PC and upload it to openwrt:
scp -P 2022 paho-mqtt-1.1.tar.gz root@192.168.0.24:/tmp/

Cannot unzip it...
root@JoySince:/tmp# tar xfz paho-mqtt-1.1.tar.gz
tar: can't open 'z': No such file or directory

Unzip locally on PC and upload to openwrt
scp -P 2022 -r paho-mqtt-1.1/ root@192.168.0.24:/tmp/

cd paho-mqtt-1.1
python setup.py install



ref
https://github.com/relayr/python-sdk/blob/master/docs/manual/openwrt.txt
http://lukse.lt/uzrasai/2015-02-internet-of-things-messaging-mqtt-2-install-python-clients-on-pc-carambola-rpi/
http://www.steves-internet-guide.com/into-mqtt-python-client/
http://www.steves-internet-guide.com/publishing-messages-mqtt-client/




Thursday, 13 September 2018

Tinkering OpenWRT (13) : Setup MQTT




Step 1: Install on openWRT
opkg update 
opkg install mosquitto mosquitto-client libmosquitto
Step 2: Start up
/etc/init.d/mosquitto enable
/etc/init.d/mosquitto restart

Step 3: Install on PC with Ubuntu
Many suggest test on the same machine with localhost. But once the mosquitto_sub will hang the terminal on openwrt, so I installed MQTT on my PC and used it as the client.

$ sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa 
$ sudo apt-get update 
$ sudo apt-get install mosquitto 
$ sudo apt-get install mosquitto-clients
Step 4: Start the sub on openwrt
root@JoySince:~# mosquitto_sub  -t "topic" -v

Step 5: Ping the openwrt on PC
$ mosquitto_pub -h OPENWRT_IP_ADDRESS -t "topic" -m "test message"
$ mosquitto_pub -h OPENWRT_IP_ADDRESS -t "topic" -m "enjoy"

Result on openwrt:
root@JoySince:~# mosquitto_sub  -t "topic" -v
topic test message
topic enjoy


ref:
https://mosquitto.org/blog/2011/08/mosquitto-on-openwrt/
https://blog.csdn.net/hehexiaoxia/article/details/72834625
https://loralandia.com/mosquitto-mqtt-broker-installation-on-openwrt/
https://blog.csdn.net/xiaoreqing/article/details/77571881